![]()
Go团队已批准泛型方法提案,这标志着该语言长期立场的重大转变。这项由Go语言联合设计师Robert Griesemer提出的提案现已进入实施阶段。
不过,Go接口无法包含泛型这一关键问题依然存在。此前的观点认为,既然泛型方法无法实现接口,那么拥有它们就没有意义,开发者可以简单地编写已经存在的泛型函数。现在观点发生了转变:即使方法不实现接口,它们对于组织代码仍然很有用,因此没有理由不让它们像函数一样支持类型参数即泛型。
Griesemer表示,这项新功能与现有Go代码完全向后兼容,尽管相关工具需要跟进更新。接口问题仍然存在,不过Griesemer补充说,提供泛型方法"并不排除在某个时候实现泛型接口方法的可能性,前提是我们能找到可接受的实现方案。"
Go语言的首个版本于2012年发布,当时完全不支持泛型编程,尽管这是一个常见的功能请求。2022年3月发布的Go 1.18增加了泛型特性,为函数和类型声明提供了类型参数。甚至在该版本发布之前,对泛型方法的请求就获得了广泛支持,但被拒绝的理由正是Griesemer现在提到的:不确定是否允许泛型方法实现接口是"合理可行的",而在其他情况下,可以使用参数化函数。
开发者对已批准提案的反应是积极的,尽管许多人认识到该功能还不完整。"我的内部工具库有很多针对缺失泛型方法的变通方案,它们都让我非常烦恼,"一位开发者表示。另一位开发者说:"当它以这种格式存在时会有些令人困惑,因为泛型方法无法用于满足接口。"
今年1月,Go团队发布了2025年开发者调查结果,调查主要基于将Go作为主要语言使用的专业开发者的回应。虽然Go开发者对该语言总体满意度很高(91%),但排名前三的困扰之一是缺乏其他语言中存在且受重视的功能。泛型方法就是这样的功能之一,但还有更大的需求,包括缺乏功能完整的枚举类型、缺乏异常处理以及缺乏空指针安全。Reddit上获得最多投票的评论总结道:"Go在枚举之前就有了泛型方法,太疯狂了。"
Q&A
Q1:Go语言的泛型方法是什么?有什么用处?
A:Go语言的泛型方法是支持类型参数的方法功能,由Go联合设计师Robert Griesemer提出。它主要用于更好地组织代码,即使不实现接口也很有用,与现有Go代码完全向后兼容。
Q2:Go语言泛型方法有哪些局限性?
A:目前最大的局限性是Go接口仍然无法包含泛型,这意味着泛型方法无法用于满足接口要求。开发者认为这会造成一定的困惑,因为功能还不完整。
Q3:Go开发者最希望增加哪些功能?
A:根据2025年开发者调查,Go开发者最希望增加的功能包括功能完整的枚举类型、异常处理和空指针安全。许多开发者认为这些功能比泛型方法更重要。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.