首页 > 后端开发 > Golang > 为什么我不能使用具有 Go 泛型联合约束的共享方法?

为什么我不能使用具有 Go 泛型联合约束的共享方法?

Linda Hamilton
发布: 2024-12-22 18:17:10
原创
419 人浏览过

Why Can't I Use Shared Methods with Go Generics' Union Constraints?

Go 泛型中的联合约束:未解决的限制

在 Go 泛型领域,类型联合约束引发了一些混乱。当尝试对联合约束内的类型使用通用方法时,编译器会抛出错误,让开发人员摸不着头脑。

考虑以下代码:

type A struct {}
type B struct {}
type AB interface { *A | *B }

func (a *A) some() bool { return true }
func (b *B) some() bool { return false }
func some[T AB](x T) bool { return x.some() } // Compilation error
登录后复制

编译器抱怨说x.some 未定义,即使 *A 和 *B 都实现了 some 方法。这就引出了一个问题:如果无法使用共享方法,为什么还要定义联合约束?

Go 跟踪器建议的解决方法是将方法添加到接口约束中:

type AB interface { *A | *B ; some() bool }
func some[T AB](x T) bool { return x.some() } // Compiles
登录后复制

然而,这是一个不完美的解决方案。 Go 的类型联合约束应该允许共享方法,而不需要显式的接口声明。不幸的是,这是 Go 1.18 的限制,记录在发行说明中:

Go 编译器当前仅支持在类型参数类型 P 的值 x 上调用方法 m(如果 m 由 P 的约束接口显式声明) .

此限制预计将在 Go 1.19 中得到解决。在那之前,开发人员必须依赖解决方法或为共享方法定义统一的接口。

以上是为什么我不能使用具有 Go 泛型联合约束的共享方法?的详细内容。更多信息请关注PHP中文网其他相关文章!

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