type CommonType[T interface{ *int } | string] []T
请问其中interface{ *int }
是什么语法,看不懂为什么要这么声明
type CommonType[T interface{ *int } | string] []T
请问其中interface{ *int }
是什么语法,看不懂为什么要这么声明
在 Go 语言中,泛型(generics)是在 Go 1.18 版本中引入的,它允许你为函数、类型和方法定义参数化的类型。在你给出的例子中,interface{ *int }
的声明实际上是不正确的,并且 Go 编译器会报错。
原因如下:
*int
,因为这意味着你期望接口中的任何类型都应该是 *int
类型的别名(这在 Go 中是不可能的,因为所有类型都是唯一的)。int
类型的值或 *int
类型的指针,你应该分别声明它们。但请注意,[]T
在泛型中通常用于切片,而切片是基于值的,因此使用指针类型 *int
在切片中可能会引发问题,因为切片会包含指针的副本,而不是它们指向的实际值的副本。如果你想要一个泛型类型,它可以接受 int
类型的值或 string
类型的值,你应该这样声明:
type CommonType[T int | string] []T
但是,如果你确实想要一个可以处理 *int
的类型(尽管这在切片中不常见),你可能需要这样声明一个非切片类型的泛型,或者考虑其他设计决策。
如果你确实想要一个可以包含 *int
或 string
的类型(尽管这在实践中可能不太常见),你可能需要使用一个空接口 interface{}
并进行类型断言或类型检查,或者使用类型嵌入和类型集合来构建更复杂的接口。但是,由于 Go 的类型系统不支持联合类型(如 T is int | *int
),你不能直接在泛型约束中这样做。
总之,interface{ *int }
不是一个有效的泛型约束,你应该重新考虑你的类型设计,以使其与 Go 的类型系统兼容。
15 回答8.4k 阅读
7 回答5.3k 阅读
6 回答6.9k 阅读✓ 已解决
8 回答6.2k 阅读
4 回答4.4k 阅读✓ 已解决
4 回答4k 阅读
1 回答3k 阅读✓ 已解决
表示一个类型的集合,这个集合里只有一个类型,就是
*int
。Interface Type