本节摘要:Go 是 Google 在 2007 年立项、2009 年发布、2012 年出 1.0 的编译型语言,核心卖点是极简语法、内建并发(goroutine 与 channel)、编译为单个静态二进制。本节讲清它为什么被造出来、拿什么换来了这些优点、如今用在哪些地方,并给一张与主流语言的对比表帮你做选型判断。
阅读完本节,你应当能够:
2007 年前后,Google 内部的主力语言是 C++ 和 Python。C++ 强大但编译慢、并发写起来像上刑;Python 灵活但性能和部署撑不起大规模服务。传说中 Robert Griesemer、Rob Pike、Ken Thompson 三人的一段走廊谈话变成了立项书。他们要的东西很明确:
1.0 在 2012 年发布,并做出一个影响深远的承诺:Go 1 的兼容性保证——老代码在新版本上不用改就能编译。这对长期维护的基础设施项目是决定性优势。
工程上没有白吃的午餐。Go 的"快与简"是用这些换的:
没有类继承。Go 用组合与接口替代继承树。刚从 Java 转来的人会难受两周,然后发现 deep inheritance 本来就是坏味道的温床。
没有异常 try/catch。错误是普通返回值,函数签名里明明白白写着 error。你被迫处理每一个失败点,代价是代码里出现不少 if err != nil——社区戏称这是"Go 的掌声"。
泛型来得晚。2022 年的 Go 1.18 才引入泛型,此前十年大家用空接口加类型断言硬扛。这也意味着网上大量老代码是非泛型风格,读资料时要注意版本。
GC 不可关。实时性要求极端苛刻的场景(比如某些硬实时系统)它不合适,虽然它的 GC 停顿已压到亚毫秒级。
💡 关键直觉:Go 的每次"缺失"几乎都是刻意为之——把容易写错的自由度收走,换可维护性。判断要不要用它,先看你能不能接受它的约束。
| 维度 | Go | Python | Java | C++ |
|---|---|---|---|---|
| 类型系统 | 静态强类型,泛型较新 | 动态,运行时才炸 | 静态,功能最全 | 静态,极复杂 |
| 编译产物 | 单个静态二进制,免装运行时 | 解释执行,需装解释器 | 字节码,需 JVM | 原生二进制 |
| 并发模型 | goroutine + channel 语言级 | GIL 限制多核并行 | 线程较重,虚拟线程较新 | 手工线程/协程库 |
| 上手成本 | 低,一两周能干活 | 最低 | 中,生态庞大 | 最高 |
| 典型用途 | 云原生、微服务、CLI 工具 | 胶水、AI、脚本 | 企业后端、Android | 游戏、高频、系统底层 |
我自己的判断标准很粗暴:写网络服务、中间件、命令行工具,Go 几乎总是划算的;写探索性数据分析,选 Python;要 JVM 生态的企业集成,选 Java;极致控制内存布局,还是 C++。
你可能每天都在用 Go 的产物而不自知:
这些系统的共同点是:长生命周期、高并发 IO、小团队维护大代码库——恰好命中 Go 的设计靶心。

⚠️ 常见坑:别因为"Go 简单"就低估它。简单的是语法,难的是并发正确性与接口设计——本教程第 3、5 章会反复锤这两点。
几个常见疑问顺手答掉。Go 免费开源吗? 是,BSD 风格许可,商用无任何约束。大厂在用吗? Google、字节、腾讯、Uber、Netflix 都有大规模 Go 服务,国内的 Go 招聘市场常年活跃。会和 Rust 打架吗? 定位不同:Rust 抢的是 C 与 C++ 的极致控制场景,Go 守的是"团队协作下的服务端效率",两者在云原生栈里甚至互补(不少组件 Rust 写底层、Go 写上层编排)。Go 适合写桌面应用或游戏吗? 不合适,GUI 与游戏生态是它的明显短板,别逆势而为。
先用最小的程序感受 Go 的"简单到什么程度"。一个完整可运行的 Go 程序,只需要包声明、main 函数和一条输出:
package main import "fmt" func main() { fmt.Println("Hello, Go!") }
go run main.go # 直接运行,输出 Hello, Go! go build main.go # 编译出单个静态可执行文件 main
这段代码已经展示了 Go 的三个惯例:package main 必须是程序入口;main 函数是启动点;import 只能导入用到的包(导入了不用的包会直接编译报错,这是 Go 从设计上杜绝"死代码依赖"的手段)。对比 Python 的 print("Hello") 与 Java 的 public class Main { public static void main(String[] args) {...} },Go 的样板代码几乎只比脚本语言多一行——这正是它"既能写脚本、又能编成二进制"的底气。
下一节我们把它装进你的电脑,跑出第一个程序。