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开发者最希望增加的功能包括功能完整的枚举类型、异常处理和空指针安全。许多开发者认为这些功能比泛型方法更重要。
好文章,需要你的鼓励
购买笔记本电脑时,用户现在需要了解Copilot+ PC、NPU和本地AI处理等新概念。搭载专用神经处理单元(NPU)的Copilot+ PC能提供至少40 TOPS的AI算力,支持实时字幕翻译、视频通话优化、AI图像编辑等功能,同时提升续航表现。戴尔最新产品线涵盖多种选择:Dell 14 Plus适合学生和通勤族,Dell 16 Plus适合多任务办公用户,XPS 14面向轻度创作者,XPS 16则以31小时超长续航和3.6磅轻薄机身成为内容创作者的旗舰之选。
香港科技大学与华为联合提出LISA训练方法,通过让副网络对齐"似然分数",将ControlNet等图像生成模型的训练收敛速度提升逾2.78倍,同时改善图像质量与条件控制精度。
圣安德鲁斯大学博士Henry Legg在《自然》杂志发表同行评审论文,对微软拓扑间隙协议(TGP)框架提出质疑,认为该框架在推断Majorana粒子量子态存在方面存在缺陷,且实验数据分析结论可能有误。微软此前宣称将于2029年实现可扩展量子计算机,并推出Majorana 2芯片。对此,微软坚持立场,表示已发表正式反驳并获《自然》收录,对研发路线图充满信心。
上交大与爱丁堡大学提出InfoKV,将信息熵与注意力权重结合用于KV缓存压缩,让大模型在仅保留12.5%缓存的条件下实现接近甚至超越完整缓存的长推理性能。