Go では、文字列から型の新しいインスタンスを作成するのは簡単な作業ではありません。 Go の静的型指定とデッド コード除去メカニズムにより、文字列として保存された型名に基づいてオブジェクトを動的に作成することが困難になります。
この制限に対処する 1 つのアプローチは、グローバルな map[string]reflect.Type を維持することです。このマップは、検出可能なタイプを定義するパッケージの init() 関数に設定できます。このマップを使用すると、目的のタイプのreflect.Typeを検索し、reflect.Newを使用してそのタイプの新しいオブジェクトへのポインタを取得できます。
type MyStruct struct { // ... } func init() { register("MyStruct", reflect.TypeOf(MyStruct{})) }
一度登録すると、リフレクションを使用した新しいインスタンス:
newObject := reflect.New(registered["MyStruct"]).Elem().Interface() myStruct := newObject.(MyStruct)
ただし、リフレクションによりパフォーマンスのオーバーヘッドが生じ、コードが複雑になる可能性があることを考慮することが重要です。次のような代替アプローチを検討する方が適切な場合があります。
以上がGo で文字列から新しい型をインスタンス化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。