首页 > 后端开发 > Golang > 为什么 Go 泛型接口方法不能有类型参数?

为什么 Go 泛型接口方法不能有类型参数?

Linda Hamilton
发布: 2024-12-06 09:52:11
原创
414 人浏览过

Why Can't Go Generics Interface Methods Have Type Parameters?

Go 泛型中的接口方法参数化

在 1.18beta2 版本中探索 Go 泛型时,开发者可能会遇到错误“接口方法必须没有尝试使用接受类型参数的方法定义接口时“类型参数”。此错误源于禁止在接口方法定义中使用类型参数的设计决策。

此限制背后的原因在于潜在的歧义和性能影响。接口方法中的类型参数可能会导致不确定参数的身份是否被保留,需要进行详尽的编译时树遍历,或者在运行时可能会影响性能的反射。

此外,参数化方法不能直接实现接口,这可能会引起混乱。

但是,有一种解决方法允许在接口中使用类型参数:将类型参数移至接口类型定义本身。这种方法保留了所需的功能,同时遵守 Go 泛型的设计限制。

例如:

type Reader[V Unmarshaler] interface {
    Read(bucket []byte, k ...[]byte) ([][]byte, error)
    ReadDoc(bucket []byte, factory func() (V, error), k ...[]byte) ([]V, error)
}

type Unmarshaler interface {
    UnmarshalKV(v []byte) error
}
登录后复制

以上是为什么 Go 泛型接口方法不能有类型参数?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板