登录
首页 >  Golang >  Go问答

向带有类型参数的函数传递精确约束的类型?

来源:stackoverflow

时间:2024-03-23 13:18:30 465浏览 收藏

在 Go 泛型中,向带类型参数的函数传递精确约束的类型时遇到编译错误。原因在于可分配性的规则:如果类型参数不是命名类型,则类型集中的每个类型都可以分配给约束类型,但类型参数本身不能分配给约束类型。因此,尽管类型参数约束为字符串类型,但函数无法将该参数直接传递给需要字符串类型参数的函数。

问题内容

我开始使用 go 泛型,但很难理解为什么这段代码无法编译:

func f(string) {}

func xyz[T string](p T) {
    f(p) // Error! Cannot use 'p' (type T) as the type string
}

在函数xyz中,为什么不能假设t存在类型约束使得t为字符串类型?

我知道我可以简单地写 f(string(p)),但我仍然对问题的答案感兴趣。


正确答案


这是因为可分配性的规则,在您的具体情况下,这是最后一个规则.

v 是一个类型参数,t 不是一个命名类型,并且 v 类型集中的每个类型的值都可以分配给 t。

类型 string 是一个命名类型,因此,尽管 t 类型集中的每个类型都可分配给 string,但类型参数 t 本身不可分配给 string

您可以将其与未命名类型进行比较。

func f([]string) {}

func xyz[T []string](p T) {
    f(p) // no issue
}

终于介绍完啦!小伙伴们,这篇关于《向带有类型参数的函数传递精确约束的类型?》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>