Go の型について考える
Go の型の動的機能を理解することは、多くの高度なプログラミング シナリオにとって重要です。この質問では、さまざまな状況でカスタム タイプの Reflect.Type を取得する方法について説明します。
既存のインスタンスから Type を取得する
カスタムの Reflect.Type を取得するにはインスタンス化せずに構造体を作成するには、次のアプローチを使用します。
type t1 struct { i int; s string } var v1 reflect.Type = reflect.TypeOf((*t1)(nil)).Elem() fmt.Println(v1) // prints "main.t1"
このメソッドは、 struct ((*t1)(nil)) を使用し、Elem() を使用して具体的な型を取得します。
文字列名から型を取得する
残念ながら、Go には現在、文字列として型の名前だけからreflect.Typeを取得する直接的な方法。これは、Go には型リテラルが存在せず、実行時に各型を特定の値に関連付ける必要があるためです。
理論的には、型情報のマップを別のパッケージに保持することは可能ですが、推奨されるアプローチではありません。型の同一性、一意性、および関連するすべての型を手動で登録する必要性に関して潜在的な問題があります。
結論
Go では、カスタムの Reflect.Type を取得します。 type には、インスタンス化されたインスタンスまたは型指定された nil 値のいずれかが必要です。文字列名から型を直接取得することはできませんが、間接的な方法を使用して同様の機能を実現できます。これらの手法を理解すると、開発者はより動的かつ反射的な方法で型を操作できるようになります。
以上がGoでカスタムタイプのreflect.Typeを取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。