Go 为什么当一个类型实现一个接口时,行为会有所不同?
谁能告诉(或链接到哪里阅读),为什么一个类型要实现一个接口 行为是否有差异(取决于如何转移收件人)? 这就是它的工作原理:Go 为什么当一个类型实现一个接口时,行为会有所不同?,go,Go,谁能告诉(或链接到哪里阅读),为什么一个类型要实现一个接口 行为是否有差异(取决于如何转移收件人)? 这就是它的工作原理: type GetNamer interface { GetName() } type Person struct { PersonName string } func (p Person) GetName() { fmt.Println(p.PersonName) } type Data []GetNamer var d = Data{ Pers
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)不匹配的错误。原因是当您将接收器签名更改为
(p*Person)
时,这意味着*Person
实现了接口,而不是Person
,因此您的“数据”数组必须更改为匹配
也就是说,您必须更改接口方法的签名和“d”变量的内容以包含Person指针,并且它应该可以工作,因为&Person{…}
是一个*Person
,它是一个GetNamer:
func (p *Person) GetName() {
// ...
}
var d = Data{
&Person{"Vasya"},
}