ホームページ >バックエンド開発 >Golang >文字列から Go タイプをインスタンス化するにはどうすればよいですか?

文字列から Go タイプをインスタンス化するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-21 08:45:11642ブラウズ

How Can I Instantiate Go Types from Strings?

Go で文字列から型の新しいインスタンスを作成する

Golang では、文字列として保存された名前に基づいて型の新しいインスタンスを作成する必要があるシナリオが発生する場合があります。 。これは以前のバージョンの Go では以前は可能でしたが、現在は簡単ではありません。

リフレクションと静的型付け

Go は静的に型付けされた言語です。つまり、コンパイラーはデータ型を検証して適用します。コンパイル時間。これにより、型の安全性が確保されますが、文字列型の名前からの新しいインスタンスの作成が直接サポートされないことも意味します。

リフレクションの利用

これを実現するには、リフレクションの使用を検討してください。実行時にオブジェクトを検査および操作します。ただし、リフレクションは複雑になり、パフォーマンスが低下する可能性があります。

グローバル型マップの維持

リフレクションを使用する 1 つのアプローチは、グローバル マップ[string]reflect.Type を維持することです。このマップは、関連するパッケージの init() 関数で初期化でき、コンパイラが実行可能ファイルに必要な型を確実に含めることができます。

その後、このマップを使用して、目的の型のreflect.Type を検索できます。そして、reflect.New を使用して新しいインスタンスを作成します。オブジェクトをインターフェイスに抽出するには、reflect.New(yourtype).Elem().Interface() を使用します。

代替アプローチ

あるいは、反省。たとえば、ファクトリ メソッドを利用したり、さまざまなタイプの作成関数を備えた map[string]func() インターフェースを維持したりすると、よりシンプルで効率的なソリューションが提供される可能性があります。

以上が文字列から Go タイプをインスタンス化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。