
go语言官方定义的25个关键字中,曾有5个被硬编码在编译器源码中的“彩蛋关键词”,它们并非真正关键字,不参与语法解析,仅作为无意义占位符存在,现已从go 1.19+版本中正式移除。
go语言官方定义的25个关键字中,曾有5个被硬编码在编译器源码中的“彩蛋关键词”,它们并非真正关键字,不参与语法解析,仅作为无意义占位符存在,现已从go 1.19+版本中正式移除。
在Francesc Campoy的知名Go语言讲座中,他曾展示一张列出Go全部25个关键字的幻灯片,并幽默指出其中包含5个“secret keywords”(隐藏关键词)。这些词并非语言规范的一部分,也不会影响程序行为——它们是Go编译器源码中一段刻意保留的彩蛋(easter egg),用于调侃法律文书常见的冗余表达。
这5个词是:
notwithstanding thetruthofthematter despiteallobjections whereas insofaras
它们曾真实存在于Go源码的词法分析器中(src/cmd/compile/internal/gc/lex.go),位于关键字识别逻辑的注释后方,以数组形式硬编码,但从未被启用:编译器会直接忽略它们,视作普通标识符(identifier)而非关键字。
✅ 正确示例(Go 1.18及更早版本):
package main
func main() {
notwithstanding := 42 // 合法:当作变量名
whereas := "legal boilerplate" // 合法
println(notwithstanding, whereas)
}
⚠️ 注意事项:
- 这些词不是Go语言的关键字,也不具备任何语义功能;
- 它们的存在纯属开发团队的幽默设计,与语法、类型系统或运行时完全无关;
- 自Go 1.19起(对应commit 57df2f8),该彩蛋已被彻底移除;当前所有Go版本(≥1.19)中,这些词与任意其他合法标识符无异,既不触发语法错误,也不享有特殊地位;
- 尝试在现代Go环境中使用它们声明变量、函数或类型,完全合法且安全,但请勿误以为它们具有保留含义。
总结而言,所谓“5个秘密关键字”实为一段已成历史的代码彩蛋——它提醒我们:Go语言在严谨性之外,也保有一份轻盈的工程师文化。理解其存在有助于深入认识Go编译器的实现细节,但切记:在实际工程中,应始终以《Effective Go》和官方语言规范为准,而非彩蛋或轶事。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!











