Go には、他の言語で一般的なデータ構造であるユニオンが本質的に存在しません。ただし、XML で選択型を過剰に使用するような状況では、その実装が必要になります。
提供されたコード スニペットで示されているように、Go でユニオンをシミュレートしようとしています。大幅なコード冗長性が導入されます。複数の述語とゲッターとともに、型ごとに個別のコンテナ構造体とコンストラクタが必要なため、実装が肥大化します。
共用体の処理を簡素化するには、作成することを検討してください。ユニオン型のオブジェクトのマーカーとして機能する Misc というインターフェイス:
type Misc interface { ImplementsMisc() } type Comment Chars func (c Comment) ImplementsMisc() {} type ProcessingInstruction func (p ProcessingInstruction) ImplementsMisc() {}
これを使用インターフェイスが適切に配置されていると、特定の基礎となる型を気にすることなく、関数を Misc オブジェクトのみに合わせて調整できます。型安全性は、これらの関数に渡されるすべてのオブジェクトが Misc を実装する必要があることを保証することで実現されます。
Go には組み込みの共用体サポートがありませんが、入れ子構造を通じてその動作をエミュレートすることで共用体の実装が可能です。そしてインターフェース。このアプローチに固有のコードの冗長性は、ユニオン オブジェクトのマーカーとしてインターフェイスを採用することで軽減できます。
以上がGo でタイプセーフなユニオンを効率的に実装するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。