Go には、プログラミング言語でよく見られる共用体型がありません。共用体を必要とする典型的な例は XML の「Misc」タイプで、コメント、処理命令、または空白を表すことができます。 Go でこの制限を回避するには、カスタム ソリューションが必要です。
提供されたコード例に示されているように、最初のアプローチには、コンテナー構造体 (「Misc」) の作成と、各共用体メンバーのコンストラクターと述語の定義が含まれます。これにより、大幅なコードの重複と肥大化が生じます。
この問題に対処するには、共通のインターフェイスを利用して「Misc」オブジェクトを定義することを検討してください。
type Misc interface { ImplementsMisc() }
その後、個々のユニオン メンバーがこのインターフェイスを実装できます。 :
type Comment Chars func (c Comment) ImplementsMisc() {} type ProcessingInstruction func (p ProcessingInstruction) ImplementsMisc() {}
このアプローチを使用すると、特定の型の処理を延期しながら、「その他」オブジェクトを一般的に処理するように関数を設計できます。
func processMisc(m Misc) { switch v := m.(type) { case Comment: // Handle comment // ... } }
このソリューションは、コンテナ オブジェクトで型の切り替えを可能にすることで共用体を模倣します。これにより、コードの重複が排除され、共用体メンバーのコンストラクターとインターフェイス固有の機能が明確に分離されます。
厳密な型安全性が優先される場合は、共用体メンバーのコンパイル時チェックを提供する型の使用を検討してください。識別共用体:
type MiscEnum int const ( MiscComment MiscEnum = 0 MiscProcessingInstruction MiscEnum = 1 MiscWhiteSpace MiscEnum = 2 ) type Misc struct { Kind MiscEnum Value interface{} }
このアプローチは、Go でのより堅牢かつ効率的な共用体実装を提供し、有効な共用体メンバーの型のみが確実に処理されるようにします。
以上がGo でユニオン型を効果的に実装するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。