一尘不染

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

go

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


阅读 281

收藏
2020-07-02

共1个答案

一尘不染

这是一个*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 assertStarDoublerIsPropertyLoadSaver PropertyLoadSaver = (*Doubler)(nil)
2020-07-02