我发现了这个变量声明var _ PropertyLoadSaver=(*Doubler)(nil),我想知道它的目的是什么。它似乎没有初始化任何东西,并且因为它使用空白标识符,所以我想您无法访问它。
var _ PropertyLoadSaver=(*Doubler)(nil)
这是一个*Doubler类型满足PropertyLoadSaver接口的编译时断言。当类型的方法集是该接口的方法集的超集时,该类型将实现接口。
*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) 将无类型的nil 转换为type的nil值*Doubler。如果实现接口,*Doubler则只能将分配给type变量。PropertyLoadSaver``*Doubler``PropertyLoadSaver
var _ PropertyLoadSaver
(*Doubler)(nil)
PropertyLoadSaver``*Doubler``PropertyLoadSaver
使用空白标识符_是因为不需要在包中的其他位置引用该变量。使用非空白标识符可以实现相同的结果:
_
var assertStarDoublerIsPropertyLoadSaver PropertyLoadSaver = (*Doubler)(nil)