前置课程
本教程完全基于 Ubuntu 系统环境
基本介绍
Go 是由 Google 开发的一门 编译型、静态强类型、并发友好 的系统级语言。主要目标是:简洁、高效、可扩展、便于部署。
语言核心特性
| 特性 | 说明 |
|---|---|
| 编译型 | 直接编译为机器码,无需虚拟机,执行速度快 |
| 静态类型 | 所有变量都有固定类型,编译期检查错误 |
| 内存安全 | 无需手动 malloc/free(有 GC) |
| 内置并发 | goroutine + channel 简化并发操作 |
| 快速构建 | go build 一键构建为二进制 |
| 简洁语法 | 去除继承、泛型(1.18 才加)、异常机制 |
Go 的三种运行/构建模式(对比 Python 和 C)
| 模式 | Go 中做法 | 类似语言对比 | 特点 |
|---|---|---|---|
| 解释运行 | go run main.go | 类似 Python python main.py | 会自动编译成临时二进制文件并运行 |
| 本地构建 | go build -o app | 类似 C 的 gcc -o app main.c | 编译出本地平台的可执行文件 |
| 交叉编译 | GOOS=linux GOARCH=amd64 go build | C 的 gcc -target | 编译为其他平台可执行文件 |
| 模块构建 | go mod init + go build | Python 的虚拟环境 + pip | 支持依赖管理和版本控制 |
与 Python 和 C 的对比总结
| 特性 | Go | Python | C |
|---|---|---|---|
| 类型系统 | 静态类型(强类型) | 动态类型 | 静态类型(弱类型) |
| 执行方式 | 编译执行 or go run | 解释执行 | 编译执行 |
| 并发支持 | 内置 goroutine/channel | 依赖 asyncio/threading | pthread / 手动管理 |
| 内存管理 | 垃圾回收 GC | 自动内存管理(GC) | 手动分配与释放 |
| 错误处理 | error 类型返回值 | try/except 异常机制 | errno 或返回值判断 |
| 开发速度 | 快(语法简单) | 非常快(无类型约束) | 慢(结构复杂) |
| 执行性能 | 高 | 慢(解释+动态类型) | 极高(接近底层) |
| 依赖管理 | go mod | pip + venv | 无官方标准,依赖 makefile |
| 可部署性 | 产出单个可执行文件 | 依赖 Python 环境 | 需动态/静态链接 |
什么时候选择 Go?
- Web 服务后端 / API 接口
- 分布式系统(Kubernetes、Docker 就是用 Go 写的)
- CLI 工具、系统工具、微服务架构
❌ 不太适合:
- 做 AI / 数据分析(生态不如 Python)
- 精细内存控制的嵌入式(不如 C)
步骤一:安装 Go 语言
方法一:自动安装
sudo apt update
sudo apt install -y golang-go
go version # 验证
输出应为
go version go1.22.2 linux/amd64
方法二:手动安装
下载 Go 安装包(以最新版 Go 1.22 为例)
wget https://go.dev/dl/go1.22.3.linux-amd64.tar.gz
你可以先访问 https://go.dev/dl/ 查看最新版本链接
解压并安装到 /usr/local(需要 sudo 权限)
sudo rm -rf /usr/local/go # 清理旧版本
sudo tar -C /usr/local -xzf go1.22.3.linux-amd64.tar.gz
配置环境变量
将以下内容加入到你的 ~/.bashrc 或 ~/.zshrc 文件末尾:
export PATH=$PATH:/usr/local/go/bin
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin
然后执行以下命令以生效:
source ~/.bashrc # 如果你用的是 bash
# 或者
source ~/.zshrc # 如果你用的是 zsh
验证安装
go version
输出应为:
go version go1.22.3 linux/amd64
步骤二:解释输出 Hello World
创建 main.go 文件
nano main.go
内容如下:
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
编译并运行
go run main.go
输出:
Hello, World!
什么是“解释输出模式”?
Go 是编译型语言,所以严格来说它并不“解释执行”。 但它提供了一个
go run命令,让你体验类似 Python 的“写了就能跑”的开发方式。go run main.go这会:
- 自动编译 main.go → 临时的可执行文件
- 立即运行这个可执行文件
- 自动删除这个临时文件
虽然看起来像解释器一样运行,但其实是一次性编译 + 执行。
你可以加上
-x选项观察完整执行过程:go run -x main.go系统的临时文件夹,一般是:
/tmp/go-build...(Linux/macOS)%TEMP%\go-build(Windows)在执行
go run过程中,你可以用以下方式看到中间文件:go run -work main.go它会输出:
WORK=/tmp/go-build1223431你可以进去
/tmp/go-build1223431看它实际生成的可执行程序。
步骤三:构建二进制可执行文件
构建二进制可执行文件 必须要用 Go Module
Go Module 是 Go 官方推荐的项目管理方式,用于:
- 管理项目依赖(像 Python 的
requirements.txt) - 指定项目的包名路径(尤其适用于多人协作)
在你当前目录 执行以下命令:
go mod init Golang_learning
Golang_learning可以随便写,比如是你的项目名,也可以写成你未来希望的包路径如github.com/yourname/Golang_learning
执行后会生成一个 go.mod 文件,然后你就可以愉快地构建了:
go build -o hello
./hello
输出:
Hello, World!