Go でインターフェース値の「実際の」タイプを取得する
Go のインターフェース{} タイプは、あらゆるタイプの値を処理する多用途の方法です。ただし、interface 値の実際のタイプを判断するのは難しい場合があります。{}以下にいくつかのアプローチを示します。
型アサーション:
提供された例で示されているように、型アサーションは最も簡単な方法です。を使用します。 (ドット) 演算子を使用すると、インターフェイス値を特定の型にキャストすることができます。たとえば、tmp の場合、ok := w.(int) は w を int にキャストしようとします。成功すると、ok を true に設定しながら値を tmp に保存します。
Type Switches:
型スイッチは、複数の型を処理するためのより包括的な方法を提供します。 switch-case ステートメントと同様に、型スイッチはインターフェイス値の型をチェックし、型に基づいて異なるコードパスを実行できます。{}たとえば、次のコード スニペットは、myInterface が int、float64、または string であるかどうかをテストします。
switch v := myInterface.(type) { case int: fmt.Printf("Integer: %v", v) case float64: fmt.Printf("Float64: %v", v) case string: fmt.Printf("String: %v", v) default: fmt.Printf("Unknown type") }
型の文字列表現の取得:
To get型の文字列表現には、reflect パッケージを使用します。インターフェイス値に対してreflect.TypeOf(value).Name()を呼び出して、型名を文字列として取得します。
typeName := reflect.TypeOf(w).Name()
型表現を使用した値の変換:
現在、文字列型表現を使用して値を変換する直接的な方法はありません。ただし、github.com/bluele/gcache などの外部ライブラリは、文字列を型に変換する関数を提供することで、このタスクを支援できます。
以上がGo の「interface{}」値の基礎となるタイプを特定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。