Method set типа - это множество методов, привязанных к типу. От него зависит, какие интерфейсы тип реализует.
T в method set входят только методы с value receiver (func (t T) M()).*T - и value, и pointer receiver методы.type S struct{}
func (S) Val() {} // value receiver
func (*S) Ptr() {} // pointer receiver
var s S
// s.Val() и s.Ptr() работают (s автоматически адресуется для Ptr)
var p *S
// p.Val() и p.Ptr() работают
type I interface{ Val(); Ptr() }
var _ I = &s // OK: *S имеет оба метода
var _ I = s // Ошибка: у S нет метода Ptr в method set
Поэтому интерфейс может требовать только *T, а не T.