我发现了这个变量声明var _ PropertyLoadSaver = (*Doubler)(nil)
,我想知道它的目的是什么.它似乎没有初始化任何东西,因为它使用空白标识符,我猜你无法访问它.
Cer*_*món 11
这是一个*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)
Run Code Online (Sandbox Code Playgroud)
这是它的工作原理.代码var _ PropertyLoadSaver
声明了一个未命名的类型变量PropertyLoadSaver
.表达式(*Doubler)(nil)
求值为type的值*Doubler
.如果实现接口,*Doubler
则只能分配给类型变量.PropertyLoadSaver
*Doubler
PropertyLoadSaver
使用空白标识符_
是因为变量不需要在包中的其他位置引用.使用非空标识符可以获得相同的结果:
var assertStarDoublerIsPropertyLoadSaver PropertyLoadSaver = (*Doubler)(nil)
Run Code Online (Sandbox Code Playgroud)