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开发者最希望增加的功能包括功能完整的枚举类型、异常处理和空指针安全。许多开发者认为这些功能比泛型方法更重要。
好文章,需要你的鼓励
穆拉蒂时隔18个月首次接受重大媒体采访,介绍其创立的Thinking Machines Lab正在开发的"交互模型"。该模型能以200毫秒间隔处理音频、文本和视频流,捕捉人类交流中的中断、修正和停顿。她还谈及OpenAI"政变周"经历,强调行业决策权过于集中的担忧,并回应了公司近期研究人员离职问题,表示这是初创实验室的正常波动。
STATE16研究院这篇综述发现,物理AI系统存在"静默失效"风险——AI以高度自信执行基于错误世界信息的动作,却不触发任何报警,并提出在AI输出与物理执行之间建立独立授权层的框架。
本期《Quick Charge》播客涵盖多个热点话题:特斯拉疑似试图删除FSD欺诈相关证据以规避巨额赔付;卡特彼勒持续推进建筑领域电气化布局;住宅太阳能30%税收抵免即将到期。此外,嘉宾Tom Pacheco就高压系统与电池技术培训展开探讨,强调电动车技术人才培养的紧迫性。节目同时提醒有意安装太阳能的用户尽快行动,可通过EnergySage平台比较多家安装商报价。
UIUC与微软联合研发的OpenWebRL框架让4B小模型仅凭400条初始数据,通过在真实网站上边做边学的强化学习方式,在网页智能体基准上超越了用27万条数据训练的竞争对手。