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

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

Patricia Arquette
リリース: 2024-12-31 20:19:11
オリジナル
430 人が閲覧しました

How Can I Instantiate a New Type in Go from a String?

新しい型のインスタンス (Golang)

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート