21CTO导读:经过较长的社区讨论、投票与确认,Go正式开始支持泛型的方法。
Go 团队近日宣布,已批准泛型方法,推翻了该语言常见问题解答中长期以来的立场。这项由 Go 语言共同设计者 Robert Griesemer 提出的提案,现在已进入实现阶段。
一个关键问题——Go 接口不能包含泛型依然存在。
以前的观点认为,泛型方法不能实现接口,因此它们没有必要存在。开发者可以直接编写泛型函数,而泛型函数已经存在。 现在的观点发生了转变 ,认为即使方法没有实现接口,它们对于组织代码仍然很有用,因此没有理由不让它们像函数一样支持类型参数(泛型)。
Griesemer表示,这项新功能完全向后兼容现有的Go代码,但工具需要进行适配。Griesemer补充说,提供泛型方法“并不排除在某个时候实现泛型接口方法的可能性,如果我们能找到可接受的实现方案的话。”
在2012 年发布的第一个 Go 版本完全不支持泛型编程,尽管这是个常见的特性请求。2022 年 3 月发布的 Go 1.18 版本 添加了泛型的特性,包括函数和类型声明的类型参数。在此版本之前,关于支持泛型方法的请求就已获得用户广泛支持,但却被研发小组拒绝了,理由与 Griesemer 现在引用的理由相同:允许泛型方法实现接口是否“合理可行”尚不确定,而且在其他情况下,可以使用带参数的函数。
开发者对此次获批的提案反响积极,很多人也知道该功能尚不完善。“我的内部工具库里有很多针对缺失泛型方法的变通方案,这些方案都让我非常恼火,” 一位开发者则表示 , “以这种形式存在时会有些令人困惑,因为泛型方法无法用于满足接口要求。”
2026年1月,Go 团队发布了 2025 年开发者调查结果,该调查主要基于以 Go 为主要编程语言的专业开发者的反馈。
结果如下:
Go 开发者总体上对这门语言感到满意(91%),但他们最不满的三大功能之一是 Go 缺少其他语言中存在且备受重视的特性。泛型方法是其中之一,但还有更迫切的需求,例如缺少功能齐全的枚举类型、缺少异常处理机制以及缺少空指针安全机制。
Reddit 上一条评论点击最高,总结下来是:“Go 先有了泛型方法,后有了枚举类型。真是有些不可思议。”
作者:场长
本篇文章为 @ 行动的大雄 创作并授权 21CTO 发布,未经许可,请勿转载。
内容授权事宜请您联系 webmaster@21cto.com或关注 21CTO 微信公众号。
该文观点仅代表作者本人,21CTO 平台仅提供信息存储空间服务。
请扫描二维码,使用微信支付哦。