Проверяет понимание, какие методы делает тип удовлетворяющим интерфейс.
Если метод с сигнатурой func (t T) M() объявлен для значения, то и T и *T реализуют интерфейс. Если func (t *T) M(), только *T реализует. Выбор влияет на возможность вызывать методы через значение или указатель при передаче в интерфейс.
Метод на значении:
func (v T) M() → T и *T реализуют интерфейс.
Метод на указателе:
func (v *T) M() → только *T реализует.
Пример:
type S struct{}
func (S) Foo() {}
func (*S) Bar() {}
var i1 interface{ Foo() } = S{} // ок
var i2 interface{ Foo() } = &S{} // ок
var i3 interface{ Bar() } = &S{} // ок
// var i4 interface{ Bar() } = S{} // ошибкаВывод
Решайте, нужны ли вам методы, мутирующие объект, чтобы определять receiver.