Go 泛型 - 类型约束和联合解释
在 Go 泛型中,联合作为接口约束的一部分发挥着特定的作用。让我们来解释一下这意味着什么,以及它与您关于使用不同类型进行测试的问题有何关系。
什么是联合?
在泛型类型约束中,联合定义了一组类型参数必须匹配的类型。例如:
type intOrString interface { int | string }
此约束确保任何泛型类型参数 T 必须是 int 或字符串。
为什么不能将联合用作类型?
带有联合的接口约束不是常规接口类型。这种区别是 Go 的泛型设计中有意为之的。
联合约束允许的操作
使用带有联合约束的类型参数的函数只能执行每个成员允许的操作联盟集。这包括:
适用于您问题
您原来的方法使用 intOrString 作为类型,这是不允许的。要正确使用联合约束,请按如下方式修改代码:
type testDifferenceInput[T intOrString] [][]T type testDifferenceOutput[T intOrString] []T type testDifference[T intOrString] struct { input testDifferenceInput[T] output testDifferenceOutput[T] } func TestDifference(t *testing.T) { var ttInts []testDifference[int] var ttStrings []testDifference[string] // Populate ttInts and ttStrings with test cases for _, tt := range append(ttInts, ttStrings) { // Execute the test case } }
通过根据类型参数分隔测试用例,您可以解决通用容器无法容纳不同项目的限制。类型。
以上是如何在类型约束中有效使用 Go 泛型联合进行测试?的详细内容。更多信息请关注PHP中文网其他相关文章!