GoLang:括号中的属性的语义含义?

Ala*_*orm 5 interface go

Go Newb 这里——我遇到了以下我没有编写的 Go 代码

if tc, ok := tng.(ThingClasser); ok {
    //... do some stuff ...
}
Run Code Online (Sandbox Code Playgroud)

我不会理解 的语义tng.(ThingClasser)

在某些方面,这看起来像一个方法调用——即有两个变量(ecok)坐在那里准备接受多个返回值。

然而,tng.(ThingClasser)它本身看起来像是属性访问,而不是方法调用。

然而,周围的括号ThingClasser是我以前从未见过的皱纹。另外,如果重要的话,该ThingClasser符号在该项目的其他地方被定义为接口,所以我认为这可能是围绕“是否实现接口”的一些语法糖——但是两个返回值让我感到困惑。

谷歌搜索没有找到任何具体的东西,但这是谷歌搜索中最困难的事情之一。

这里有谁知道 GoLang 中的这个调用/语法是什么,并可能给我指出相关的手册页,以便我可以 RTFM?

Adr*_*ian 3

这是一个类型断言。返回值是 1) 转换为给定类型的对象;2) 指示转换是否成功的布尔值。ThingClasser是要转换成的类型。文档可以在这里找到: https: //golang.org/ref/spec#Type_assertions

  • 附带说明一下,Go 规范值得一读。与大多数现代语言不同,它很短——非常短。C# 规范大小的 1/5,Java 规范大小的 1/10。由于 Go 的简单性,您可以在几个小时内阅读整个原始语言规范并从中受益匪浅。 (2认同)