go 语言接口实现与方法字面量一致性
在 go 语言中,接口定义了一组方法集合,要实现接口,具体类型必须提供与接口声明中字面量一致的方法。
例如,存在以下接口和类型:
product 接口
type product interface { getinfo() string }
登录后复制
producta 类型,实现了 product 接口
type producta struct { name string } func (p *producta) getinfo() string { return p.name }
登录后复制
creator 接口
type creator interface { produce() product // 接口方法声明返回值为 product 接口类型 }
登录后复制
creatora 类型,未能实现 creator 接口
type CreatorA struct{} func (c *CreatorA) Produce() *ProductA { // 这样写 CreatorA 并未实现 Creator 接口 return &ProductA{"xxx"} }
登录后复制
尽管 producta 实现了 product 接口,但 func (c *creatora) produce() *producta 却没有实现 creator 接口。只有将代码修改为 func (c *creatora) produce() product 才能实现此接口。
原因在于接口是方法集合的预定义,而具体类型要实现接口,必须严格实现其方法,包括返回值类型的一致性。
在这种情况下,creatora 如果要实现 creator 接口,其 produce 方法必须返回 product 接口,而不是实现了此接口的具体类型 producta。
因此,go 语言中接口的方法实现要求十分严格,实现的方法必须与接口声明中的方法字面量完全一致,包括返回值类型在内。
以上就是Go 语言接口实现:方法字面量一致性如何体现?的详细内容,更多请关注php中文网其它相关文章!