Go のカスタム型では型アサーションが失敗するのに変換が機能するのはなぜですか?
Nov 04, 2024 am 08:41 AMGo での名前付き型のアサーションと変換
事前定義された型を再定義するためにカスタム型が定義される次のシナリオを考えてみましょう。
<code class="go">type Answer string</code>
次に、元の定義済み型を受け入れる関数でこのカスタム型を使用してみます。
<code class="go">func acceptMe(str string) { fmt.Println(str) } func main() { type Answer string var ans Answer = "hello" // Type assertion fails acceptMe(ans.(string)) // Conversion works acceptMe(string(ans)) }</code>
型アサーション ans.(string) はエラーで失敗します。 : 無効なタイプ アサーション: ans.(string) (非インターフェイス タイプの回答が左側)。一方、変換文字列(ans)は成功します。この動作により、次のような疑問が生じます。
なぜ型アサーションは失敗するのに、変換は機能するのですか?
これを理解するために、型アサーションはインターフェイスに対してのみ機能することを明確にしましょう。インターフェイスには任意の基礎となる型を含めることができるため、型アサーションと型スイッチが不可欠になります。型アサーションは、アサーションの成功を示す結果とともにブール値を返します。
対照的に、カスタム型 Answer には、固定の基礎となる型 (文字列) があります。正確な型はすでにわかっているので、Answer から string への変換は常に成功するため、型アサーションは必要ありません。この変換の構文は string(ans).
です。以上がGo のカスタム型では型アサーションが失敗するのに変換が機能するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

人気の記事

人気の記事

ホットな記事タグ

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか?

GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか?

トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか?

MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は?

GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか?

GOの実際のパフォーマンスを正確に反映するベンチマークを作成するにはどうすればよいですか?
