接口方法中的类型参数:Go 泛型困境
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中文网其他相关文章!