我发现了这个变量声明var _ PropertyLoadSaver = (*Doubler)(nil)
,我想知道它的目的是什么。它似乎没有初始化任何东西,因为它使用空白标识符,我猜你无法访问它。
答案 0 :(得分:9)
这是*Doubler
类型满足PropertyLoadSaver
接口的编译时断言。
如果*Doubler
类型不满足接口,则编译将退出,错误类似于:
prog.go:21: cannot use (*Doubler)(nil) (type *Doubler) as type PropertyLoadSaver in assignment:
*Doubler does not implement PropertyLoadSaver (missing Save method)
这是它的工作原理。代码var _ PropertyLoadSaver
声明了一个类型为PropertyLoadSaver
的未命名变量。表达式(*Doubler)(nil)
的计算结果为*Doubler
类型的值。如果*Doubler
实现ProperytLoadSaver
接口,*Doubler
只能分配给PropertyLoadSaver
类型的变量。
使用空白标识符_
,因为该变量不需要在包中的其他位置引用。使用非空标识符可以获得相同的结果:
var assertStarDoublerIsPropertyLoadSaver PropertyLoadSaver = (*Doubler)(nil)