Go は静的に型付けされた言語であり、コンパイル時に変数の型を決定することによって型安全性を強力に強化します。ただし、変数を動的にキャストする必要が生じるシナリオもあり、そのようなことが可能かどうかについて疑問が生じます。
そのようなシナリオの 1 つは、基になる型についての事前知識なしに、インターフェイス値を特定の型にキャストすることです。これをさらに詳しく調べるために、次の例を考えてみましょう。
type Age interface{} var interfaceAge = 25
単純なキャストは直感的かもしれませんが、
var intAge = interfaceAge.(int)
未知の型を扱う場合には不十分です。この課題に対処するために、プログラマは次の代替案を検討するかもしれません:
var x = getType() var someTypeAge = interfaceAge.(x)
ただし、このアプローチにはすべての型に適用できる汎用スキームがないため、課題も生じます。この質問に答えるには、Go のような静的型付け言語では動的キャストが通常は不可能であることを認識することが重要です。これは、コンパイラが型チェックとメモリ管理のためにコンパイル時に型情報を必要とするためです。
動的キャストの代わりに、Go では、実行時に型をイントロスペクトして操作するメカニズムを提供するリフレクト パッケージが導入されています。インターフェイス値の型を動的に決定する方法の 1 つは、型スイッチングを利用することです。
var t interface{} t = "Hello" switch t.(type) { case string: fmt.Println("The value is a string") default: fmt.Println("The value is of an unknown type") }
型スイッチングを使用すると、インターフェイス値の実際の型を検査し、その特定の値に基づいてアクションを実行できます。タイプであり、動的なシナリオをより柔軟に処理できます。
以上がGo の静的型付けは動的インターフェイスのキャストを処理できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。