1 回答

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超5個(gè)贊
語言規(guī)范明確禁止使用帶有類型元素的接口作為類型參數(shù)約束以外的任何東西(引號(hào)在Interface types段落下):
非基本接口只能用作類型約束,或用作其他接口的元素用作約束。它們不能是值或變量的類型,也不能是其他非接口類型的組件。
嵌入的接口comparable
或其他非基本接口也是非基本接口。您的Number
界面包含一個(gè)聯(lián)合,因此它也是非基本的。
幾個(gè)例子:
// 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在類型轉(zhuǎn)換中使用Number(1),這是不允許的。
您只能Number用作類型參數(shù)約束,即限制允許實(shí)例化泛型類型或函數(shù)的類型。例如:
type Coordinates[T Number] struct {
x, y T
}
func sum[T Number](a, b T) T {
return a + b
}
- 1 回答
- 0 關(guān)注
- 247 瀏覽
添加回答
舉報(bào)