在阅读Go文档时,我发现:

您可以要求编译器通过try 赋值来判断类型T是否实现了接口I:

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

我不明白u是用来做什么的,我在其他作业(job)中也看到过,但我不明白它的意思.深入挖掘,我发现它被称为"空白标识符",但我不理解他们所说的用例:

_ = x // evaluate x but ignore it

围棋习语对我来说仍然有点陌生,所以我试图理解为什么我想做这样的事情.

推荐答案

_是一个特殊标识符,您可以将任何内容赋值给它,但不能从中读取.在您提供的第一个示例中:

var _ I = T{}

由于无法访问此变量,因此将从结果程序中对其进行优化.但是,如果类型T不可分配给接口I,则可能会导致编译错误.因此,在本例中,它被用作关于某个类型的静电断言.

第二种情况更为常见.虽然丢弃函数调用的结果可能看起来很奇怪,但在具有多个返回的函数中可能更有意义.假设函数foo返回两个值,但您只对第一个感兴趣?您可以使用_忽略第二个:

a, _ = foo()

您可以通过创建另一个变量来保存不需要的返回值来获得相同的效果,但是这个特性意味着您不需要为它 Select 一个唯一的名称.

Go相关问答推荐

Golang regexpp:获取带有右括号的单词

gorm如何声明未自动更新的unix时间戳米尔斯字段

如何模拟嵌入. FS?

带有条件的for循环中缺少RETURN语句

如何使用中间件更改http请求的响应代码?

Go:拆分一个由逗号分隔的键/值对字符串,并在给定的键/价值对中嵌入可能的逗号

无效操作:v > max(类型参数 T 与 > 不可比较)

从 ApiGateway 中的 lambda Go 返回 Json

如何从Go项目连接Microsoft Access数据库?

如何在 fyne-io/fyne 中设置文本的字母间距?

如何使用泛型将接口转换为指定类型

使用 ssh 从私有 gilab 仓库导入一个 go 项目:未知修订

获取不带类型参数的泛型 struct 的类型名称

Dockerfile 问题 - 为什么找不到二进制 dlv - 没有这样的文件或目录

在 Gorm 的 AfterFind() 钩子中获取智能 Select struct 的值

没有堆栈跟踪的 go 程序崩溃是什么意思?

具有近似约束的函数值导致的实例化失败

Go GCP 同时模拟两个服务帐户

什么是无效字符实体 &ccb

正确编码 JWT