1 回答
TA贡献1780条经验 获得超5个赞
语言规范明确禁止使用带有类型元素的接口作为类型参数约束以外的任何东西(引号在Interface types段落下):
非基本接口只能用作类型约束,或用作其他接口的元素用作约束。它们不能是值或变量的类型,也不能是其他非接口类型的组件。
嵌入的接口comparable
或其他非基本接口也是非基本接口。您的Number
界面包含一个联合,因此它也是非基本的。
几个例子:
// basic: only methods
type A1 interface {
GetName() string
}
// basic: only methods and/or embeds basic interface
type B1 interface {
A1
SetValue(v int)
}
// non-basic: embeds comparable
type Message interface {
comparable
Content() string
}
// non-basic: has a type element (union)
type Number interface {
int | int64 | float64
}
// non-basic: embeds a non-basic interface
type SpecialNumber interface {
Number
IsSpecial() bool
}
在变量的初始化中a,你试图Number在类型转换中使用Number(1),这是不允许的。
您只能Number用作类型参数约束,即限制允许实例化泛型类型或函数的类型。例如:
type Coordinates[T Number] struct {
x, y T
}
func sum[T Number](a, b T) T {
return a + b
}
- 1 回答
- 0 关注
- 220 浏览
添加回答
举报