2016-08-18 99 views
1

试图了解interface的空白功能。空白做什么界面?

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

type manager struct { 
} 

var _ Manager = &manager{} 

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

可能的重复http://stackoverflow.com/questions/38167403/specs-whats-the-purpose-of-the-blank-identifier-in-variable-assignment –

回答

2

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

在上面的代码中,如果编写manager类型的人忘记为其实现GetAge方法,那么代码将不会编译,编译错误将准确告诉他们缺少哪些方法。

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

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