Go 的十四年

Go 语言发布十四年后,人们普遍把它视为“无聊但可靠”的基础设施:易学、编译快、工具链强大,且标准库支撑着当今大量云与 DevOps 生态(如 Docker、Kubernetes、Terraform 等)。评论者将 Go 有意保持精简的特性集与 Rust、Java、Python 等更丰富但更复杂的语言进行对比,讨论泛型、缺少和类型与空值安全、错误处理以及并发易用性等取舍。许多人认为 Go 的向后兼容性和单二进制部署是其长期后端服务的重大优势,尽管也有人批评其设计局限以及 Google 在其演进中的核心角色。

语言热度与观感

  • 发帖者指出,Go 既吸引热情,也招来“语言抨击”,常被表述为“Go 不是 Rust”。
  • 有人认为,这种抨击正说明它很受欢迎,也说明一些团队被迫使用 Go,而他们更想用别的语言。
  • 也有人觉得,Go 已经进入了“无聊但安全”的类别:热度下降、使用广泛、倡导声量减少。

“现代”地位与同类语言

  • 与 Java/Python/C++ 相比,Go 被视为最年轻的主流语言之一。
  • 人们经常把它与 Rust、Swift、Kotlin、Java、C#、JavaScript 和 Python 作比较,讨论特性、安全性和生态系统。

学习曲线与开发体验

  • 许多人表示 Go 很容易上手,尤其是对 PHP/Python/Java/C 开发者来说。
  • 也有人在 Go 和/或 Rust 的语法/语义上遇到困难,并被建议只选一种,先做出真实项目。
  • 工具链(格式化器、linter、IDE 支持、测试/基准测试框架)多次受到称赞。

常见优点

  • 编译快、静态二进制文件小。
  • 标准库扎实,尤其是在网络和 HTTP 方面。
  • 部署简单(单个二进制文件),非常适合云原生和 CLI 工具。
  • 并发原语(goroutine、channel)被认为很强大,而且性能很好。
  • Go 1 的向后兼容性被强调为一大资产。

批评与缺失特性

  • 常见抱怨包括:
    • nil,以及缺少 option/result 类型或空值安全。
    • 枚举能力较弱,缺少和类型/模式匹配。
    • 错误处理冗长、容易忘记(if err != nil)。
    • 接口、泛型和反射存在一些粗糙边缘。
  • 有人认为 Go 过于受限/极简;也有人认为这减少了过度工程化。

并发与 panic

  • 讨论的焦点之一是 Go 是否真的有“很好的并发易用性”。
  • 与 Erlang/Elixir 的比较表明,Go 的原语虽然容易使用,但难以正确使用,存在竞态和死锁风险。
  • 任意 goroutine 中未被恢复的 panic 会导致整个程序崩溃,这被视为一个重要的设计缺陷;围绕 panic 是否应该可恢复,以及这与 Rust 的对比,展开了长篇讨论。

设计哲学、生态与长久性

  • 反复强调 Go 有意保持较小的特性集,优先考虑可读性和可维护性,而不是表达力。
  • 有人担心对 Google 的依赖;也有人认为开源状态和广泛采用让它的未来相对安全。
  • Go 被视为后端服务、基础设施/DevOps 工具和“把事情做成”的优秀选择,但目前并不特别适合 ML、科学计算、图形、或重型桌面/嵌入式工作。