プリミティブに基づいた型の Reflect.Kind の取得: 詳細な説明
多くの場合、開発者は、reflect.Kind を決定する必要に遭遇します。プリミティブ型に基づいた基礎となる実装を持つ型。 as:
type ID interface { myid() } type id string func (id) myid() {}
上記の例では、「id」タイプは、基礎となる文字列プリミティブを使用して「ID」インターフェイスを実装します。課題は、デフォルトの Reflect.String 種類ではなく、reflect.Interface 値を取得することにあります。
解決策の公開: インターフェイスへのポインタ
よくある誤解は、パスを渡すことです。 TypeOf() を反映するタイプ「id」の値。ただし、これにより、文字列プリミティブが埋め込まれたインターフェイスに値が暗黙的に再パッケージ化されます。
このハードルを克服する鍵は、インターフェイスへのポインタを活用することです。{}ポインタを渡すことにより、型記述子はインターフェースをラップし、再パッケージ化を防ぎます。{}その後、Type.Elem() を使用して、型のインターフェイスの性質を正確に反映する、指定されたインターフェイスの型記述子を取得できます。
id := ID(id("test")) t := reflect.TypeOf(&id).Elem() fmt.Println(t.Kind()) // Output: interface
このアプローチにより、型に必要な Reflect.Interface の種類が効果的に明らかになります。
追加の洞察: インターフェイスへのポインター利点
この手法は、最初の問題を解決するだけでなく、インターフェイスへのポインターを使用する利点も強調します。特定の型 (文字列や時間など) を期待する関数に値を渡す場合など、特定の場合には、暗黙的な変換を回避するためにインターフェイスへのポインターが有利になることがあります。
これらのガイドラインに従うことで、開発者は正確に次のことを行うことができます。プリミティブから派生した型の種類を取得し、Go のリフレクション機能をより深く理解します。
以上がGo でプリミティブの基礎となるインターフェイス型の `reflect.Kind` を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。