Go语言泛型方法提案:打破限制,增强代码编写能力
导航菜单
切换导航。登录、外观设置。
平台
AI代码创作包括GitHub Copilot、GitHub Spark、GitHub Models、MCP Registry(新);开发者工作流有Actions、Codespaces、Issues、Code Review;应用程序安全包含GitHub Advanced Security、代码安全、密钥保护;探索方面有为何选择GitHub、文档、博客、更新日志、市场。还有查看所有功能的链接。
解决方案
按公司规模划分有企业版、中小团队版、初创公司版、非营利组织版;按用例划分有应用现代化、DevSecOps、DevOps、CI/CD,还有查看所有用例的链接;按行业划分有医疗保健、金融服务、制造业、政府机构,以及查看所有行业的链接。还有查看所有解决方案的链接。
资源
按主题探索有人工智能、软件开发、DevOps、安全,以及查看所有主题的链接;按类型探索有客户案例、活动与网络研讨会、电子书与报告、商业洞察、GitHub技能;支持与服务包括文档、客户支持、社区论坛、信任中心、合作伙伴。还有查看所有资源的链接。
开源
社区有GitHub Sponsors;项目包括安全实验室、维护者社区、加速器、GitHub Stars、存档计划;仓库有主题、热门趋势、合集。
企业版
企业解决方案是企业平台;可用附加组件有GitHub Advanced Security、Copilot for Business、高级支持。还有定价链接。
搜索或跳转至...
搜索代码、仓库、用户、问题、拉取请求等,有搜索语法提示。
提供反馈
会阅读每一条反馈并认真对待意见,可选择包含电子邮件地址以便联系,有取消和提交反馈按钮。
保存的搜索
使用保存的搜索可更快速筛选结果,要查看所有可用限定符可参阅文档。有取消和创建保存的搜索选项。还有登录、注册、外观设置等相关提示。
其他导航选项
包括代码、问题、拉取请求、讨论、操作、项目、维基、安全与质量、洞察。
spec: Go的泛型方法 #77273
新建问题、复制链接,该问题已关闭,有相关标签和里程碑。
描述
griesemer于2026年1月22日开启此问题。
提案:Go的泛型方法
观点转变
为清晰起见,使用“具体方法”和“接口方法”来描述不同类型的方法。当前规范中,具体方法是带有接收者的函数,但方法不能声明新的类型参数,只能有泛型类型的接收者。过去拒绝添加泛型具体方法是因为需要泛型接口方法,而Go不支持此类泛型接口方法。但具体方法不仅是实现接口的手段,Go用户长期要求使用泛型方法,现在也许是时候改变观点,泛型具体方法本身就很有用。
提案
提议具体方法声明应与函数声明完全相同,但带有接收者,方法声明语法应接受类型参数。泛型方法的类型参数标识符作用域从方法名称之后开始,到方法体结束。调用泛型具体方法与泛型函数调用方式相同。方法表达式和方法值继续按预期工作。语法需要小调整,类型参数要从操作数语法转移到主表达式语法。接口的方法不变,泛型具体方法无法通过反射访问。
示例
给出了不同类型的泛型方法示例,包括非接口接收者基类型、泛型接收者基类型、接口与泛型类型的实现关系等。还给出了与Go库相关的示例,以及方法表达式和方法值的工作情况。
实现
规范
对语言规范的更改很小且完全向后兼容,更新规范还涉及现有文档和第三方文档。
编译器
解析器已接受方法的类型参数但会报错,移除错误是简单更改。类型检查器需进行调整。编译器后端更改可能显著,但通过非接口接收者的方法调用可在编译时静态解析。导入/导出数据格式需更新,需精心分阶段更新。
库和工具
现有库无需更改,未来版本可能使用泛型方法。工具需处理新特性,go/types API可能无需更改API,但客户端不能依赖现有情况,可能需要一到两个发布周期让工具跟上。
其他考虑因素
本提案与现有Go完全向后兼容,不妨碍实现泛型接口方法。泛型方法可增强代码编写能力,使用得当可简化和泛化情况。目前无法进行反馈。
元数据
负责人
未分配。
标签
有LanguageChange、Proposal、Proposal - Accepted、generics、release - blocker等标签。
类型
无类型。
字段
可提供反馈,无类型问题未配置字段。
项目
提案项目,状态已接受。
里程碑
Go1.27无截止日期。
关系
暂无。
开发
没有分支或拉取请求。
问题操作
页脚有相关导航,包括条款、隐私、安全、状态、社区、文档、联系我们、管理Cookie、不共享个人信息等。此时无法执行该操作。
