2017-10-10 11 views
2

ゴー初心者くさい - 私はtng.(ThingClasser)の意味を理解することはありませんGoLang:括弧で囲まれたプロパティの意味の意味?ここ

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

を書いていないのGoコードの以下のビットに遭遇しました。

これはメソッド呼び出しのように見えます。つまり、2つの変数(ecok)が複数の戻り値を受け入れる準備ができています。

しかし、tng.(ThingClasser)自体は、メソッド呼び出しではなくプロパティアクセスのように見えます。

しかし、約ThingClasserの括弧はこれまでに見たことがないしわです。また、重要であれば、ThingClasserシンボルはこのプロジェクトの別の場所でインターフェイスとして定義されているので、これはの周りの構文的な砂糖かもしれないと思いますが、これはインターフェイスを実装しますが、2つの戻り値が混乱します。

グーグルでは何も具体的なものは見つかっていませんが、これはグーグルにとって難しいものの1つです。

ここで誰もこのコール/構文がGoLangにあることを知っていますか、関連するマニュアルページで私に指摘してRTFMできるのですか?

+2

[Go言語仕様](https://golang.org/ref/spec)は比較的簡単です。それはこれらのことをチェックするのに最適な場所です。 – JimB

答えて

3

これはタイプアサーションです。戻り値は、1)指定された型に変換されたオブジェクト、 2)変換が成功したかどうかを示すブール値。 ThingClasserは変換先の型です。ドキュメントはここにあります:https://golang.org/ref/spec#Type_assertions

+2

Go仕様は、ほとんどの現代の言語とは異なり、短いです - 本当に短いです.C#仕様の1/5、そしてJava仕様のサイズの1/10。Goのシンプルさのおかげで、生の言語仕様全体を数時間で読むことができ、そこから多くを得ることができます。 – Adrian

関連する問題