Golang では、文字列として保存された名前に基づいて型の新しいインスタンスを作成する必要があるシナリオが発生する場合があります。 。これは以前のバージョンの Go では以前は可能でしたが、現在は簡単ではありません。
Go は静的に型付けされた言語です。つまり、コンパイラーはデータ型を検証して適用します。コンパイル時間。これにより、型の安全性が確保されますが、文字列型の名前からの新しいインスタンスの作成が直接サポートされないことも意味します。
これを実現するには、リフレクションの使用を検討してください。実行時にオブジェクトを検査および操作します。ただし、リフレクションは複雑になり、パフォーマンスが低下する可能性があります。
リフレクションを使用する 1 つのアプローチは、グローバル マップ[string]reflect.Type を維持することです。このマップは、関連するパッケージの init() 関数で初期化でき、コンパイラが実行可能ファイルに必要な型を確実に含めることができます。
その後、このマップを使用して、目的の型のreflect.Type を検索できます。そして、reflect.New を使用して新しいインスタンスを作成します。オブジェクトをインターフェイスに抽出するには、reflect.New(yourtype).Elem().Interface() を使用します。
あるいは、反省。たとえば、ファクトリ メソッドを利用したり、さまざまなタイプの作成関数を備えた map[string]func() インターフェースを維持したりすると、よりシンプルで効率的なソリューションが提供される可能性があります。
以上が文字列から Go タイプをインスタンス化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。