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开发者最希望增加的功能包括功能完整的枚举类型、异常处理和空指针安全。许多开发者认为这些功能比泛型方法更重要。
好文章,需要你的鼓励
英国国家医疗服务(NHS)正将无人机纳入常规医疗物流体系。自今年2月起,无人机每天在雷恩斯公园和圣乔治医院之间运送血液等诊断样本,飞行仅需3分钟,比公路运输快约85%,且碳排放减少高达98%。目前已有逾2000名患者受益。NHS计划将该服务扩展至圣赫利尔、克罗伊登等多家医院,最终惠及约180万名患者。该网络由英国医疗初创公司Apian与谷歌旗下Wing合作运营。
AgentLens是Explyt公司联合俄罗斯学术机构开发的AI编程助手评测基准,通过分析完整人机交互轨迹而非仅看最终结果,从五个维度评估代码智能体的真实表现。
边缘AI计算厂商Aetina宣布,将在其DeviceEdge AIE-KT风冷系列和新款AIE-PT无风扇平台上支持英伟达全新Jetson T3000和T2000模块。T3000基于Blackwell GPU,最高提供865 FP4 TFLOPS算力,功耗70W;T2000则提供400 FP4 TFLOPS,面向视觉AI代理和自主移动机器人等场景。两款模块预计2027年第一季度上市,支持Nemotron、Cosmos 3等英伟达AI软件生态。
韩国梨花女子大学提出Splash框架,通过识别AI模型中的"休眠参数"并只在其中训练触觉能力,让小型多模态AI在学会感知材质触感的同时,完整保留原有视觉语言推理能力。