Go でカスタム型を扱う場合、名前付き型アサーションと変換の間のニュアンスを理解することが不可欠です。例を使って概念を調べてみましょう。
以下のコード スニペットを考えてみましょう。ここでは、事前定義された文字列型を再定義するカスタム型 Answer を定義します。
<code class="go">type Answer string</code>
次に、Answer を使用してみます。文字列型を予期する関数:
<code class="go">func acceptMe(str string) { fmt.Println(str) } func main() { type Answer string var ans Answer = "hello" // Assertion fails: cannot use ans (type Answer) as type string in function argument acceptMe(ans) // Type assertion fails as well: invalid type assertion: ans.(string) (non-interface type Answer on left) acceptMe(ans.(string)) // Conversion succeeds. acceptMe(string(ans)) }</code>
型アサーションはインターフェイスにのみ適用されます。インターフェイスでは、基礎となる型を変えることができます。実際の型を決定するために、Go は型アサーション (x.(T)) または型スイッチ (switch x := x.(type)) を使用します。アサーションは、アサーションが成功したかどうかを示すブール値を返します。
この場合、Answer は固定の基礎となる型 (文字列) を持つ名前付き型です。基礎となる型がわかっているため、アサーションは必要ありません。 string(ans) を使用して Answer タイプを string に変換するだけで十分です。
以上がGo のカスタム型の型アサーションと変換の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。