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中文网其他相关文章!