规范:变量赋值中空白标识符的用途是什么?

时间:2016-07-03 06:40:09

标签: go

我发现了这个变量声明var _ PropertyLoadSaver = (*Doubler)(nil),我想知道它的目的是什么。它似乎没有初始化任何东西,因为它使用空白标识符,我猜你无法访问它。

1 个答案:

答案 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)