Go でのインターフェイスの動的キャスト
Go では、開発者はインターフェイスを動的にキャストする必要性に直面することがよくあります。この記事では、これが実現可能かどうかを検討し、タイプ切り替えメカニズムを使用した解決策を提供します。
問題ステートメント
次のシナリオを考えてみましょう:
var intAge = interfaceAge.(int)
このコードは、interfaceAge が int インターフェイスであることを前提としています。ただし、実際には、interfaceAge のタイプはコンパイル時にはわからない場合があります。ここで疑問が生じます: インターフェイスを型付き変数に動的にキャストする方法はありますか?
動的キャスト
残念ながら、Go は静的に型付けされた言語です。変数の型はコンパイル時に固定されます。質問で示唆されているように、動的キャストは Go では不可能です。
型の切り替え
この制限を克服するには、型の切り替えを使用できます。タイプの切り替えにより、実行時にインターフェースのタイプを決定し、タイプ固有の操作を実行できます。
var t interface{} t = functionOfSomeType() switch t := t.(type) { default: fmt.Printf("unexpected type %T", t) // %T prints whatever type t has case bool: fmt.Printf("boolean %t\n", t) // t has type bool case int: fmt.Printf("integer %d\n", t) // t has type int case *bool: fmt.Printf("pointer to boolean %t\n", *t) // t has type *bool case *int: fmt.Printf("pointer to integer %d\n", *t) // t has type *int }
このコードは、インターフェースのタイプを動的に決定し、タイプ固有の操作を実行する方法を示しています。{}タイプ切り替えを使用した操作。
以上がインターフェイスの動的キャストを実行できますか? 実行できない場合、代替手段は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。