プリミティブ型に基づいて型のreflect.Interface Kindを取得する方法
Goで、インターフェースを実装する型を操作する場合ただし、実装ではプリミティブ型に依存するため、reflect.Kind をreflect.Interfaceとして取得する必要があります。この記事では、このニーズに対応し、解決策を提供します。
問題
次の状況を考えてみましょう:
type ID interface { myid() } type id string func (id) myid() {}
ここで、ID はインターフェイスです文字列である id によって実装されます。型記述子を取得するためにreflect.TypeOf(id)を使用すると、結果は目的のreflect.Interfaceではなく、reflect.Stringになります。
解決策
この問題を回避するには、reflect.TypeOf() に値そのものではなく、インターフェイス値へのポインタを渡す必要があります。これにより、インターフェイスでの値の暗黙的なラップが防止されます。
id := ID(id("test")) t := reflect.TypeOf(&id).Elem() fmt.Println(t.Kind()) // Output: "interface"
この例では、reflect.TypeOf(&id) はインターフェイス値へのポインタを返し、その後、Elem() を使用してラップを解除します。{}インターフェイス自体の型記述子を取得します。このアプローチにより、必要なreflect.Interface Kindが提供されます。
補足
同じ手法を使用して、reflect.Interfaceを返す任意のタイプのreflect.Typeを取得できます。 Kind() を呼び出します。単に値または型へのポインタをreflect.TypeOf().
に渡すだけです。以上がプリミティブ型に基づいた Go 型のreflect.Interface Kindを取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。