我开始使用 Go 泛型并且很难理解为什么这段代码无法编译:func f(string) {}func xyz[T string](p T) { f(p) // Error! Cannot use 'p' (type T) as the type string}在 function 中xyz,为什么不能假定 T 上存在类型约束,使得 T 是字符串类型?我知道我可以简单地写f(string(p)),但我仍然对问题的答案感兴趣。
1 回答
潇潇雨雨
TA贡献1833条经验 获得超4个赞
这是因为assignability规则,在您的特定情况下,这是最后一条规则。
V 是类型参数,T 不是命名类型,并且 V 的类型集中的每个类型的值都可以分配给 T。
Typestring
是命名类型,因此,即使 的T
类型集中的每个类型都可分配给string
,类型参数T
本身也不可分配给string
。
您可以将其与未命名类型进行比较。
func f([]string) {}
func xyz[T []string](p T) {
f(p) // no issue
}
- 1 回答
- 0 关注
- 79 浏览
添加回答
举报
0/150
提交
取消