Go におけるユニオンのベスト プラクティス
プログラミングではユニオンが広く使われているにもかかわらず、Go にはユニオンがありません。この欠けている機能に対処するために、さまざまなアプローチが登場しました。
一般的なアプローチの 1 つは、共用体内の可能な型ごとに個別の構造体を定義し、それらの構造体の 1 つをコンテナー インターフェイス内に格納することです。この方法では型安全性が提供されますが、大幅なコード冗長性が生じます。提供された例に見られるように、共用体の各型には大量のコンストラクター、述語、ゲッター関数が必要です。
この冗長性を軽減するには、オブジェクトを共用体に属するものとしてマークするインターフェイスを定義することを検討してください。これにより、後まで具体的な型を指定せずに関数が Misc 要素を操作できるようになります。
例:
type Misc interface { ImplementsMisc() } type Comment Chars func (c Comment) ImplementsMisc() {} type ProcessingInstruction func (p ProcessingInstruction) ImplementsMisc() {}
このアプローチにより、関数は Misc オブジェクトを一般的に処理できます。
func HandleMisc(m Misc) { switch m.(type) { case Comment: fmt.Println("It's a comment") case ProcessingInstruction: fmt.Println("It's a processing instruction") } }
このメソッドはある程度の簡略化を提供しますが、実際の型にアクセスするには型アサーションが必要です。 object.
真の共用体を模倣するために、提供された例は推奨されるアプローチを表しています。ただし、コードの冗長性が生じます。残念ながら、Go でこのプロセスを簡素化する広く受け入れられている方法はありません。
以上がGo でユニオンを効果的にシミュレートするにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。