在Go 中處理Union:最佳實踐調查
Go 缺乏內建的union 類型,這在某些情況下可能是一個缺點。例如,在處理 XML 對聯合的使用時,Go 開發人員必須找到替代解決方案。
一個常見的方法是建立一個容器結構體來保存可以組成聯合的不同類型。然而,這種方法可能會導致程式碼臃腫,函數和方法冗餘。
在本文中,我們將探討 Go 中是否有更好的處理聯合的方法。
目前的解決方案:冗餘程式碼
考慮建模 XML 的 Misc 非終結符的範例,它可以是註解、處理指令或空白區域。使用容器結構體實作此聯合的 Go 程式碼需要為每種類型編寫建構函式、getter 和謂詞:
type Misc struct { value interface{} } func MiscComment(c *Comment) *Misc { return &Misc{c} } func MiscProcessingInstruction(pi *ProcessingInstruction) *Misc { return &Misc{pi} } func MiscWhiteSpace(ws *WhiteSpace) *Misc { return &Misc{ws} } func (m Misc) IsComment() bool { _, ok := m.value.(*Comment); return ok } func (m Misc) Comment() *Comment { return m.value.(*Comment) }
此解冗長且重複。它缺乏 Go 常見的簡單性和優雅性。
替代方法
型切換:
Volker 提出了一種類型switch 作為可行的替代方案:
switch v := m.value.(type) { case *Comment: // Type-assert v if needed // ... }Volker 提出了一種類型switch 作為可行的替代方案:
雖然type switch減少了重複的程式碼,它仍然缺乏編譯器強制的類型安全性。
介面標記:type Misc interface { ImplementsMisc() } type Comment Chars func (c Comment) ImplementsMisc() {} type ProcessingInstruction func (p ProcessingInstruction) ImplementsMisc() {}一個潛在的解決方案是建立一個將某些內容標識為Misc 元素的介面:
func myFunc(m Misc) { switch m := m.(type) { case Comment: // Type-assert m if needed // ... } }這種方法可以建立僅處理Misc物件的函數,從而允許在運行時:
注意事項和結論
儘管Go 中缺乏內置的聯合類型,但這些替代方法提供了處理聯合的解決方案。雖然容器結構方法複製了 Java 風格的聯合,但它需要更多的編碼工作。類型切換方法更簡單,在運行時處理聯合,但類型安全性降低。最後,介面方法在類型安全性和程式碼簡單性之間提供了折衷。
哪種方法最合適取決於開發人員願意接受的特定要求和權衡。以上是在沒有內建支援的情況下,Go 開發人員如何有效地處理聯合?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

掌握Go語言中的strings包可以提高文本處理能力和開發效率。 1)使用Contains函數檢查子字符串,2)用Index函數查找子字符串位置,3)Join函數高效拼接字符串切片,4)Replace函數替換子字符串。注意避免常見錯誤,如未檢查空字符串和大字符串操作性能問題。

你應該關心Go語言中的strings包,因為它能簡化字符串操作,使代碼更清晰高效。 1)使用strings.Join高效拼接字符串;2)用strings.Fields按空白符分割字符串;3)通過strings.Index和strings.LastIndex查找子串位置;4)用strings.ReplaceAll進行字符串替換;5)利用strings.Builder進行高效字符串拼接;6)始終驗證輸入以避免意外結果。

thestringspackageingoisesential forefficientstringManipulation.1)itoffersSimpleyetpoperfulfunctionsFortaskSlikeCheckingSslingSubstringsStringStringsStringsandStringsN.2)ithandhishiCodeDewell,withFunctionsLikestrings.fieldsfieldsfieldsfordsforeflikester.fieldsfordsforwhitespace-fieldsforwhitespace-separatedvalues.3)3)

WhendecidingbetweenGo'sbytespackageandstringspackage,usebytes.Bufferforbinarydataandstrings.Builderforstringoperations.1)Usebytes.Bufferforworkingwithbyteslices,binarydata,appendingdifferentdatatypes,andwritingtoio.Writer.2)Usestrings.Builderforstrin

Go的strings包提供了多種字符串操作功能。 1)使用strings.Contains檢查子字符串。 2)用strings.Split將字符串分割成子字符串切片。 3)通過strings.Join合併字符串。 4)用strings.TrimSpace或strings.Trim去除字符串首尾的空白或指定字符。 5)用strings.ReplaceAll替換所有指定子字符串。 6)使用strings.HasPrefix或strings.HasSuffix檢查字符串的前綴或後綴。

使用Go語言的strings包可以提升代碼質量。 1)使用strings.Join()優雅地連接字符串數組,避免性能開銷。 2)結合strings.Split()和strings.Contains()處理文本,注意大小寫敏感問題。 3)避免濫用strings.Replace(),考慮使用正則表達式進行大量替換。 4)使用strings.Builder提高頻繁拼接字符串的性能。

Go的bytes包提供了多種實用的函數來處理字節切片。 1.bytes.Contains用於檢查字節切片是否包含特定序列。 2.bytes.Split用於將字節切片分割成smallerpieces。 3.bytes.Join用於將多個字節切片連接成一個。 4.bytes.TrimSpace用於去除字節切片的前後空白。 5.bytes.Equal用於比較兩個字節切片是否相等。 6.bytes.Index用於查找子切片在largerslice中的起始索引。

theEncoding/binarypackageingoisesenebecapeitProvidesAstandArdArdArdArdArdArdArdArdAndWriteBinaryData,確保Cross-cross-platformCompatibilitiational and handhandlingdifferentendenness.itoffersfunctionslikeread,寫下,寫,dearte,readuvarint,andwriteuvarint,andWriteuvarIntforPreciseControloverBinary


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

禪工作室 13.0.1
強大的PHP整合開發環境

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器