Go での型の同一性について考える: 名前または型自体から型メタデータを取得できますか?
Go では、リフレクションは実行時の型と値のイントロスペクションと操作において極めて重要な役割を果たします。ただし、特定のタイプに関連付けられたリフレクション タイプを取得すると、次のような興味深い疑問が生じます。
1.型そのものから型リフレクションを取得する
インスタンス化せずに型のリフレクト.タイプに直接アクセスできますか?
答え: はい、可能です。インスタンス化せずに型のreflect.Typeを取得することができます。 1 つのアプローチには、型指定された nil ポインターから作成された Reflect.Type で Elem() メソッドを使用することが含まれます。例:
type t1 struct { i int; s string } var v1 reflect.Type = reflect.TypeOf((*t1)(nil)).Elem() fmt.Println(v1) // prints "main.t1"
2.文字列としての名前から型リフレクションを取得する
文字列として名前が指定された型のreflect.Typeを取得できますか?
答え:残念ながら、型名を表す文字列から直接reflect.Typeを取得することはGoでは実現できません。これには、ランタイムがバイナリ内のすべての型の包括的なマップを維持する必要があり、潜在的な複雑さと制限が生じます。
ランタイムではサポートされていませんが、型名を対応する型にマップするカスタム型レジストリを作成することは可能です。反映します。タイプ。ただし、このアプローチでも手動登録が必要であり、重複した型名や匿名型に関する問題が発生する可能性があります。
以上がGo で型のアイデンティティを反映できますか: 型名または型自体から型メタデータを取得するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。