17611538698
info@21cto.com

Golang 正式引入泛型方法

图片

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 先有了泛型方法,后有了枚举类型。真是有些不可思议。”

作者:场长

评论

我要赞赏作者

请扫描二维码,使用微信支付哦。

分享到微信