谁可以告诉(或链接在哪里阅读),为什么当类型执行接口时 行为有所不同(取决于如何转移收件人)? 这样就可以了:
type GetNamer interface {
GetName()
}
type Person struct {
PersonName string
}
func (p Person) GetName() {
fmt.Println(p.PersonName)
}
type Data []GetNamer
var d = Data{
Person{"Vasya"},
}
但是,如果我通过链接传递收件人:(p * Person) 我收到类型(Person和GetNamer)不匹配的错误。
答案 0 :(得分:1)
原因是,当您将接收者签名更改为(p *Person)
时,表示*Person
实现了界面,而不是Person
,因此您的"数据"数组必须更改为匹配。
也就是说,您必须更改接口方法的签名和" d"的内容。变量以包含Person指针,它应该可以工作,因为&Person{...}
是*Person
,它是一个GetNamer:
func (p *Person) GetName() {
// ...
}
var d = Data{
&Person{"Vasya"},
}