Go 语言的成功源于其对工程实践的极致追求。从 goroutines 到接口设计,Go 通过简洁、实用的特性,形成了独特的风格和理念,助力开发者构建健壮、可扩展的大型系统。然而,Go 团队近年来的决策——从包管理到泛型,再到最近的错误处理提案暂停——却似乎在用“简单至上”的教条,扼杀其工程实践的初衷。
包管理的教训:忽视社区,固步自封
回顾 Go 的包管理历史,社区曾提出诸多优秀的解决方案,如 Dep 和 Glide ,但 Go 团队并未采纳,而是推出了问题重重的 go mod 。在 go mod 的世界里,版本管理显得荒诞:2.0 版本被视为全新模块,多版本依赖冲突问题层出不穷。官方文档缺乏清晰规则,开发者只能通过阅读 go mod 的源码来理解其逻辑。这种“代码即规则”的做法,背离了工程实践对透明性和效率的要求,暴露了 Go 团队的官僚作风和对社区声音的漠视。
泛型的设计:KPI 驱动的失败尝试
Go 1.18 引入的泛型本应是语言演进的里程碑,但其实现却令人失望。方括号语法( T[any])不仅与 Go 的简洁风格格格不入,更背离了 C++、Rust 等语言在泛型上的成熟工程实践。Go 的设计者似乎缺乏足够的泛型开发经验,忽视了社区多年来在类型系统上的探索。相比之下,Go 的成功恰恰源于对成熟工程实践的借鉴——goroutines 简化了并发,接口提供了灵活性,而泛型的方括号却像是一个仓促的 KPI 项目,与 Go 的工程基因背道而驰。
错误处理提案的暂停:工程实践的又一次背叛
最新一期 Go 官方博客宣布暂停所有错误处理提案,彻底关闭语法改进的探索,这无疑是 Go 团队对工程实践的又一次背叛。显式错误处理( if err != nil )确实为代码健壮性提供了保障,但显式并不意味着必须写冗长的样板代码。社区提案中,例如借鉴 Rust 的 ? 运算符的方案,完美平衡了显式处理与代码简洁性。这种方式既保留了错误检查的透明性,又让开发者专注于业务逻辑,而非满屏的 if err != nil 。
Go 团队却以“保持简单性”为由,拒绝这些成熟的工程实践方案。他们似乎更关心新特性是否符合所谓的“Go 风格”,而非是否能提升开发效率和代码可维护性。这种官僚化的决策逻辑,忽视了 Go 社区多年来对错误处理优化的呼声,也让 Go 在现代编程语言的竞争中逐渐失去优势。
结语:Go 应回归工程实践的初心
Go 语言的魅力在于其对工程实践的专注:简单、可靠、适合团队协作。然而,包管理的混乱、泛型的失误,以及错误处理提案的暂停,都让人怀疑 Go 团队是否还在倾听社区,是否还在践行工程实践的初心。Go 需要的是基于成熟实践的创新,而不是固守教条的“简单性”。你怎么看? Go 还能否重拾工程实践的核心价值?欢迎讨论!
论语法特性, 那帮人是不会去理会现代语言的发展趋势的,
毕竟 C 语言只需要用指令去操作内存块就够了, 语法效率跟 C 语言没什么关系的.