php中文网

Go 语言接口实现:方法字面量一致性如何体现?

php中文网

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中文网其它相关文章!