在 Go 中,聯合(其他語言中的常見資料結構)本質上是不存在的。然而,像處理 XML 過度使用選擇類型這樣的情況需要它們的實作。
嘗試在 Go 中模擬聯合,如提供的程式碼片段所示,引入了顯著的程式碼冗餘。每種類型需要單獨的容器結構和構造函數,以及多個謂詞和 getter,這使得實現變得臃腫。
要簡化聯合處理,請考慮創建一個名為Misc 的接口,用作聯合類型對象的標記:
type Misc interface { ImplementsMisc() } type Comment Chars func (c Comment) ImplementsMisc() {} type ProcessingInstruction func (p ProcessingInstruction) ImplementsMisc() {}
有了這個接口,就可以單獨定制函數Misc 對象,而不關心特定的底層類型。透過確保傳遞給這些函數的任何物件都必須實作 Misc 來實現類型安全。
雖然 Go 缺乏內建的聯合支持,但可以透過透過嵌套結構模擬聯合的行為來實現聯合和介面。透過使用介面作為聯合物件的標記可以減輕這種方法固有的程式碼冗餘。
以上是我們如何在 Go 中有效地實現類型安全聯合?的詳細內容。更多資訊請關注PHP中文網其他相關文章!