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开发者最希望增加的功能包括功能完整的枚举类型、异常处理和空指针安全。许多开发者认为这些功能比泛型方法更重要。
好文章,需要你的鼓励
今天讲的出海案例是三星医疗,一家从宁波起家做智能电表的A股公司,旗下子公司三星瑞典签下荷兰最大区域电网运营商Enexis的变压器框架合同,金额1.17亿欧元,约合9.49亿元人民币。
香港大学团队开发的Utonia首次实现了跨领域3D点云数据的统一处理,通过因果模态屏蔽、感知粒度重定标和RoPE增强位置编码三大创新,让一个AI模型就能理解室内扫描、户外雷达、工业设计等各种3D数据。该方法不仅在多个基准测试中超越专门模型,还在机器人操作、空间推理等应用中展现出色性能,为未来空间智能技术发展奠定重要基础。
人工智能正推动计算需求激增,但电信运营商面临结构性障碍:专有技术控制着其无线接入网络。开放RAN旨在打破这种控制,为创新开门。Stackpane首席执行官指出,推理工作负载更加计算密集,代理AI框架需要更严格的策略控制。RAN智能控制器仍被诺基亚等少数供应商垄断。电信运营商规模有限且监管严格,难以实现技术部门的规模经济和快速创新。
Physical Intelligence团队发布了FAST技术,这是一种全新的机器人动作学习方法。该技术通过频域压缩解决了传统方法在高频精细动作上的训练难题,将训练效率提升5倍。FAST首次实现了机器人在未见环境中的零样本操作,能够完成衣物折叠等复杂任务,为通用服务机器人的发展奠定了重要基础。