传递具有精确约束的类型参数以使用该参数运行?

我开始使用 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)),但我仍然对问题的答案感兴趣。


qq_花开花谢_0
浏览 80回答 1
1回答

潇潇雨雨

这是因为assignability规则,在您的特定情况下,这是最后一条规则。V 是类型参数,T 不是命名类型,并且 V 的类型集中的每个类型的值都可以分配给 T。Typestring是命名类型,因此,即使 的T类型集中的每个类型都可分配给string,类型参数T本身也不可分配给string。您可以将其与未命名类型进行比较。func f([]string) {}func xyz[T []string](p T) {    f(p) // no issue}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go