Go 语言简介
本教程共 80 篇 · 第 1 篇 · 更新于 2026-07-27 · 约 6 分钟阅读
1. Go 语言简介
本节目标:了解 Go 从哪里来、为什么被创造出来、适合做什么,建立对这门语言的整体认知。
Go 是什么
Go 是 Google 在 2009 年开源的一门编程语言。因为早期官网域名是 golang.org,社区里也常叫它 Golang,但官方名称就是 Go。
它的三位创始人分别是 Robert Griesemer、Rob Pike 和 Ken Thompson——这三位都是计算机领域的重量级人物。
Ken Thompson 是 Unix 操作系统和 B 语言(C 语言的前身)的设计者,Rob Pike 参与了 UTF-8 编码的设计,Robert Griesemer 参与了 Java HotSpot 编译器和 V8 引擎的开发。
简单说,这门语言的起点很高。
为什么要有 Go
Go 诞生的背景其实很实际。2000 年代后期,Google 内部的代码库已经非常庞大,C++ 编译一次要等好几分钟甚至几十分钟。Java 开发效率不错,但运行时太重。Python 写起来快,但性能不够。
三位创始人想造一门这样的语言:
- 编译快:像脚本语言一样,改完代码马上能跑
- 运行快:接近 C 的性能
- 写起来简单:语法少,没有花里胡哨的东西
- 天生并发:多核时代,并发不能是附加题
- 工程友好:大团队协作时不容易出错
Go 的哲学可以用一句话概括:少即是多。它不追求语言特性的丰富,而是追求用最少的语法做最多的事。
Go 的核心特性
我挑几个最影响你日常写代码的说。
简洁的语法
Go 只有 25 个关键字,比 Java 的 50 个少一半。没有类继承,没有泛型模板元编程(泛型在 1.18 加入,但用法很克制),没有异常处理的 try-catch(用 error 接口替代)。
你学完基础语法大概两周,就能开始写真正的项目了。
天生并发
Go 的并发模型叫 CSP(Communicating Sequential Processes),核心是两个东西:
- goroutine(协程):比线程轻量得多的并发单位,创建一个 goroutine 只需要几 KB 内存
- channel(通道):goroutine 之间通信的管道
Go 社区有一句名言:「不要通过共享内存来通信,而要通过通信来共享内存」。这句话你现在可能不理解,等学到并发章节就明白了。
编译型,静态类型
Go 是编译型语言,源代码直接编译成机器码,运行不需要虚拟机。同时它又是静态类型的,变量类型在编译期就确定了,很多错误在编译时就能发现。
但 Go 的类型系统不像 Java 那么啰嗦,它支持类型推断,写 x := 42 就行,不用写 int x = 42。
工具链一体化
Go 自带了完整的工具链,不需要装一堆插件:
go build编译go run直接运行go test跑测试go fmt统一代码格式go mod管理依赖go vet静态检查
一个人写代码也好,一个团队协作也好,格式和风格天生统一。
快速编译
C++ 大项目编译几十分钟是常态,Go 大项目编译几秒到几十秒就够了。这是因为 Go 的编译器设计上就追求速度——依赖关系简单,不允许循环引用,头文件机制也和 C/C++ 完全不同。
交叉编译
在 Windows 上写代码,想编译成 Linux 上能跑的二进制?设两个环境变量就行:
set GOOS=linux
set GOARCH=amd64
go build
这个特性在写容器化应用时特别方便,你不用在每台机器上都装 Go。
Go 适合做什么
Go 最擅长的领域是后端服务和云原生基础设施。举几个例子:
- Web 服务和 API:高并发、低延迟的 HTTP 服务,Go 的标准库
net/http就够用 - 微服务:Go 编译出来的是单个二进制文件,部署极其方便,启动快,内存占用小
- 云原生工具:Docker、Kubernetes、etcd、Prometheus、Terraform、CockroachDB——这些你听过的知名项目全都是 Go 写的
- CLI 工具:交叉编译 + 单二进制分发,写命令行工具特别合适
- 网络编程:goroutine + channel 天生适合处理大量并发连接
Go 和其他语言对比
| 特性 | Go | Java | Python | C++ |
|---|---|---|---|---|
| 编译速度 | 极快 | 慢 | 不编译 | 很慢 |
| 运行性能 | 高 | 中高 | 低 | 极高 |
| 并发模型 | goroutine | 线程 | GIL 限制 | 线程 |
| 学习难度 | 低 | 中 | 低 | 高 |
| 部署方式 | 单二进制 | JVM | 解释器 | 二进制 |
| 适合领域 | 后端/云原生 | 企业级/Android | 数据/AI/脚本 | 系统/游戏/高性能 |
NoteGo 不是万能的。它不适合写操作系统内核,不适合做前端界面,也不适合做需要大量数值计算的科学计算场景。但在后端服务领域,它目前是非常有竞争力的选择。
Go 的版本演进
了解 Go 的版本历史对你学习有帮助,因为教程里会标注哪些特性是哪个版本引入的:
| 版本 | 年份 | 里程碑 |
|---|---|---|
| 1.0 | 2012 | 第一个正式版 |
| 1.5 | 2015 | 自举(用 Go 写 Go 编译器) |
| 1.11 | 2018 | 引入模块(Module)机制 |
| 1.18 | 2022 | 泛型(Generics)正式发布 |
| 1.21 | 2023 | slices/maps/cmp 标准库、min/max 内置函数 |
| 1.22 | 2024 | 循环变量每次迭代新建、range over int |
| 1.23 | 2024 | range over func(迭代器函数) |
| 1.24 | 2025 | 泛型类型别名、go.mod tool 指令 |
| 1.25 | 2025 | Green Tea GC 实验、容器感知 GOMAXPROCS |
| 1.26 | 2026 | new(expr)、go fix 现代化器、Green Tea GC 默认启用 |
本教程基于 Go 1.26.5(Go 1.26.0 发布于 2026-02-10),所有内容以这个版本为准。
学完这节你能做什么
- 知道 Go 是什么语言,谁创造的,为什么被创造
- 了解 Go 的核心优势和适用场景
- 对 Go 版本演进有基本概念,知道哪些特性是新的
下一节我们开始动手——安装 Go 开发环境。