Go では、型名のみが文字列として利用可能な場合にオブジェクトをインスタンス化するのは簡単ではありません。これは、Go が静的に型指定され、リンク中に未使用のコードが削除されるためです。
リフレクションの使用
制約にもかかわらず、リフレクションを使用してインスタンスを動的に作成できます。プロセスは次のとおりです。
コード例:
import ( "fmt" "reflect" ) // Global map for type lookup var typeMap = make(map[string]reflect.Type) func init() { // Initialize typeMap by adding types to it typeMap["MyStruct"] = reflect.TypeOf(MyStruct{}) } func main() { typeName := "MyStruct" t := typeMap[typeName] instance := reflect.New(t).Elem().Interface() fmt.Println(instance) }
代替アプローチ
反省とは別に、次のことを考慮してください。代替案:
注: これらのアプローチにより、リフレクションの複雑さが回避され、コンパイル中のエラー処理が向上する可能性があります。
以上が型名のみを文字列として使用して Go インスタンスを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。