2017-10-10 124 views
2

轉到福利局在這裏 - 我遇到的Go代碼如下位,我沒寫GoLang:包含在括號內的屬性的語義意義?

if tc, ok := tng.(ThingClasser); ok { 
    //... do some stuff ... 
} 

我不明白的tng.(ThingClasser)語義。

在某些方面,這看起來像一個方法調用 - 即有兩個變量(ec,ok)坐在那裏準備接受多個返回值。

但是,tng.(ThingClasser)本身看起來像它的一個屬性訪問,而不是方法調用。

然而,ThingClasser左右的皺紋是我以前從未見過的皺紋。另外,如果它很重要,ThingClasser符號在這個項目的其他地方定義爲一個接口,所以我認爲這可能是一些附近的語法糖,它實現了一個接口 - 但後來這兩個返回值讓我困惑。

谷歌搜索還沒有發現任何具體的東西,但這是谷歌難以接受的事情之一。

有沒有人知道GoLang中這個調用/語法是什麼,並且有可能在相關的手冊頁面指向我,這樣我可以RTFM?

+2

[Go language spec](https://golang.org/ref/spec)相對簡單。這是檢查這些事情的最佳地點。搜索'。(''快速找到「類型斷言」規範 – JimB

回答

3

這是一個類型斷言。返回的值是1)轉換爲給定類型的對象;和2)指示轉換是否成功的布爾值。 ThingClasser是被轉換爲的類型。文檔可以在這裏找到:https://golang.org/ref/spec#Type_assertions

+2

作爲一個側面說明,Go規範值得一讀,與大多數現代語言不同,它很短 - 非常短,是C#規範的1/5大小, Java規格的十分之一大小。由於Go的簡單性,您可以在幾個小時內閱讀完整的原始語言規範,並從中獲益匪淺。 – Adrian