Go の名前付き型アサーションと変換
Go では、名前付き型アサーションと変換により、開発者はカスタム データ型や事前定義されたデータ型を操作できます。ただし、事前定義された型を再定義するカスタム型を扱う場合、誤解が生じる可能性があります。この問題について詳しく見てみましょう。
次のコード例を考えてみましょう:
<code class="go">type Answer string func acceptMe(str string) { fmt.Println(str) } func main() { type Answer string var ans Answer = "hello" // Illegal usage acceptMe(ans) // Failed type assertion acceptMe(ans.(string)) // Works (but why?) acceptMe(string(ans)) }</code>
Q: 変換中に型アサーション (ans.(string)) が失敗するのはなぜですか(string(ans)) works?
A: 型アサーションは、値が満たせる契約を表すインターフェイス型にのみ適用されます。 Answer のようなカスタム型はインターフェイスではないため、型アサーション構文を使用してカスタム型をアサートしようとするとエラーが発生します。
対照的に、変換では、ある型を別の型に明示的に変換します。 Answer には基礎となる文字列型があるため、変換 (string(ans)) は成功します。 Go は、Ans を acceptMe に渡す前に暗黙的にその基になる文字列に変換します。
補足:
以上がGo のカスタム型で型アサーションが失敗するのに、変換は成功するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。