在 Go 中,联合有两个主要目的:
但是,这是至关重要的请注意,联合只能在接口约束中使用。 尝试将它们用作常规类型,例如 tt :=不支持 []testDifference[intOrString]。
此外,通用容器(例如切片)无法容纳不同类型的项目。虽然您的测试切片同时包含 testDifference[int] 和testDifference[string],这些具体实例化是不同的类型。
要解决这个问题,您可以为每种类型使用单独的切片(ttInts 和 ttStrs)或将所有项存储为接口([]interface{})。
联合约束上的操作仅限于类型集中所有类型都支持的操作。 int | 的情况字符串,包括变量声明、转换、比较、排序和运算符。
示例:
type intOrString interface { int | string } func beforeIntOrString[T intOrString](a, b T) bool { return a < b } func sumIntOrString[T intOrString](a, b T) T { return a + b } func main() { fmt.Println(beforeIntOrString("foo", "bar")) // false fmt.Println(beforeIntOrString(4, 5)) // true fmt.Println(sumIntOrString("foo", "bar")) // foobar fmt.Println(sumIntOrString(10, 5)) // 15 }
在此示例中,beforeSendIntOrString 和 sumIntOrString 是泛型函数分别适用于 int 和 string 值。
以上是Go 泛型如何处理联合及其在类型约束和容器中的限制?的详细内容。更多信息请关注PHP中文网其他相关文章!