Go 泛型中的聯合
在 Go 中使用泛型時,理解聯合的概念非常重要。聯合是介面約束中使用的類型集。以下是您遇到的問題的詳細說明:
您正在建立一個從多個切片傳回唯一元素的 Difference 函數。最初,您將 intOrString 定義為同時包含 int 和 string 類型的介面。
但是,Go 要求介面約束只能在型別參數清單中使用,而不是作為型別使用。相反,您應該在testDifferenceInput、testDifferenceOutput 和testDifference 類型的類型參數中使用intOrString 作為約束:
type testDifferenceInput[T intOrString] [][]T type testDifferenceOutput[T intOrString] []T type testDifference[T intOrString] struct { input testDifferenceInput[T] output testDifferenceOutput[T] }
您面臨的另一個問題是測試切片包含不同的切片類型,例如testDifference[ int] 和testDifference[string]。儘管 testDifference 類型是通用的,但其具體實例化是不可互換的。如果需要儲存不同類型的切片,則必須使用 []interface{} 或將它們分成不同的切片。
最後,請記住,僅允許聯合類型集的每個成員允許的操作工會的限制。在 int | 的情況下字串,允許的操作包括變數宣告、轉換、比較、排序和加法運算子。
遵循這些指南,您可以在 Go 泛型程式碼中有效地利用聯合來增強類型安全性和靈活性。
以上是如何在 Go 泛型中有效使用 Union 來實現類型安全性和靈活性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!