Причина в том, что когда вы изменяете подпись получателя на (p *Person)
, это означает, что *Person
реализует интерфейс, а не Person
, поэтому ваш массив "Data" должен быть изменен для соответствия.
То есть вы должны изменить сигнатуру метода интерфейса и содержимого переменной "d", чтобы она содержала указатели Person, и она должна работать, поскольку &Person{...}
- это *Person
, то есть GetNamer:
func (p *Person) GetName() {
// ...
}
var d = Data{
&Person{"Vasya"},
}