Go 泛型中的聯合表示一組可用於約束泛型類型參數。它們僅用於介面約束,表示泛型類型參數 T 只能接受聯合中包含的類型。
在為泛型函數編寫單元測試時,您可能會遇到不同類型測試的挑戰。在您的例子中,您的目標是在同一個表測試中使用整數和字串來測試您的 Difference 函數。
您嘗試建立用於測試的 intOrString 介面約束時遇到了錯誤,因為 intOrString 不是有效類型。它是一個約束,將泛型類型參數 T 限制為 int 或 string。您不能使用類型約束直接實例化類型。
您應該將測試輸入和輸出切片聲明為泛型類型,而不是使用intOrString 約束intOrString 約束:
type testDifferenceInput[T intOrString] [][]T type testDifferenceOutput[T intOrString] []T
但是,這種方法並不能完全解決您的問題。通用容器不能容納不同類型的物品。在您的測試切片中,您有兩種不同的類型:testDifference[int] 和 testDifference[string]。
為了在單元測試中容納不同的類型,您可以將按類型切片:
ttInts := []testDifference[int]{ // ... test cases for ints } ttStrs := []testDifference[string]{ // ... test cases for strings }
以上是如何在聯合約束中有效地對具有混合類型的 Go 泛型函數進行單元測試?的詳細內容。更多資訊請關注PHP中文網其他相關文章!