一尘不染

Go中下划线(空白标识符)的含义

go

当我阅读Go文档时,我发现了这一点:

您可以通过尝试分配,要求编译器检查类型T是否实现了接口I:

type T struct{}
var _ I = T{} // Verify that T implements I.

我不了解_的用途,并且在其他作业中也见过_,但无法理解它的含义。深入研究,我发现它被称为“空白标识符”,但我不理解他们放置的用例:

_ = x // evaluate x but ignore it

惯用语对我还是有点陌生​​,所以我试图理解为什么我想做这样的事情。


阅读 348

收藏
2020-07-02

共1个答案

一尘不染

_是一个特殊的标识符,您可以为其分配任何内容,但永远不要读取。在第一个示例中,您给出了:

var _ I = T{}

无法访问此变量,因此将从结果程序中对其进行优化。但是,如果类型T不能分配给interface
,则可能会导致编译错误I。因此,在这种情况下,它被用作关于类型的静态断言。

第二种情况更常见。尽管丢弃函数调用的结果似乎很奇怪,但在具有多个返回的函数中它可能更有意义。考虑一个foo返回两个值的函数,但是您只对第一个感兴趣?您可以使用_忽略第二个:

a, _ = foo()

通过创建另一个变量来保存不需要的返回值,您可以得到相同的效果,但是此功能意味着您不必担心为其选择唯一的名称。

2020-07-02