空白为界面做了什么?

时间:2016-08-18 18:51:22

标签: go

尝试在go中了解interface的空白功能。

type Manager interface {
    GetAge(name string) (int, error)
}

type manager struct {
}

var _ Manager = &manager{}

func NewManager() Manager {
    return &manager{}
}

1 个答案:

答案 0 :(得分:2)

这是一个特殊的习惯用法,用于在编译时断言具体类型是否实现给定的接口。

在上面的代码中,如果编写manager类型的人忘记为它实现GetAge方法,则代码不会编译,编译错误会告诉他们确切的方法很缺失。

这里可能看起来有点多余,但如果需要通过类型实现的接口具有大量方法,则此技术可能会有所帮助。

请注意,由于上述原因,上面的代码不会编译。此外,您需要确保在空白声明中使用&manager{},它实现*manager manager(指向Manager的指针)界面,而不仅仅是manager