Golang教程

推荐链接:

所有版本:https://go.dev/dl/

发布历史:https://go.dev/doc/devel/release

搜 索 库:https://pkg.go.dev/

标 准 库:https://pkg.go.dev/std

Go 命 令:https://pkg.go.dev/cmd/go

用户手册:https://go.dev/doc/

Go 语言高效编程:https://go.dev/doc/effective_go

Go 编程语言规范:https://go.dev/ref/spec

Go by Example:https://gobyexample.com/https://gobyexample-cn.github.io/

Go 菜鸟教程:https://www.runoob.com/go/go-tutorial.html

GoLand 下载:https://www.jetbrains.com/go/download/other.html

安装

下载解压版:go1.24.2.windows-amd64.zip

GUI配置环境变量:

1
2
3
4
5
6
7
GOROOT=D:\Program\go\
GOBIN=%USERPROFILE%\go\bin # 后续使用 go install 安装的二进制程序都存放在 GOBIN 里
PATH=%GOROOT%\bin\ # 新建。让 go 的二进制程序可以直接使用。
PATH=%GOBIN% # 新建。让 GOBIN 里的二进制程序可以直接使用。

# 查看版本
go version

Go环境变量

命令 作用
go env 查看所有当前 Go 环境变量
go env VAR 查看单个变量(如 go env GOPATH
go env -w VAR=value 写入配置文件,永久设置变量(Go 1.13+ 支持)。
即将变量写入本地配置文件(通常位于 $HOME/.config/go/env%USERPROFILE%\go\env)。
go env -u VAR 取消变量设置,即从配置文件中删除(恢复默认行为)
go env -json 以 JSON 格式输出所有变量,适合脚本或工具
1
2
3
4
5
6
7
8
# GOPATH 指定工作目录的根。1、存放依赖包缓存(比如在 $GOPATH/pkg/mod 下);2、存放 go install 安装后的二进制文件(在 $GOPATH/bin)。
go env -w GOPATH=%USERPROFILE%\go
# 后续使用 go install 安装的二进制程序都存放在 GOBIN 里
go env -w GOBIN=%USERPROFILE%\go\bin
# GOPROXY 多个地址之间用英文逗号分隔,Go 会按顺序尝试这些代理。direct 表示直接访问源地址拉取。
go env -w GOPROXY=https://goproxy.cn,direct
# GOPRIVATE 是 Go Modules 引入的配置项,用于声明哪些模块是私有的,不应该通过公共代理访问,也不应校验哈希(checksumdb)。
go env -w GOPRIVATE=*.zhaolq.com,internal

项目结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
├─01
│ └─hello
│ go.mod
│ go.sum
│ hello.go

└─02
│ go.work

├─greetings
│ go.mod
│ greetings.go
│ greetings_test.go

└─hello
go.mod
hello.go

go.mod—模块定义文件(git管理)

这是 Go 模块的核心文件,描述项目的模块路径、依赖项及其版本。

主要作用:

  • 声明模块名(通常是项目的 import path)
  • 指定 Go 版本(go 1.20 等)
  • 声明依赖的第三方模块和版本(require
  • 可包含 replace 替换依赖模块路径(本地调试等)

示例内容:

1
2
3
4
5
6
7
8
9
10
module example/hello

go 1.24

require rsc.io/quote v1.5.2

require (
golang.org/x/text v0.24.0
rsc.io/sampler v1.99.99
)

go.sum—校验和文件(git管理)

记录每个依赖模块及其版本的哈希校验和,用于验证依赖包的一致性和完整性。

作用:

  • 防止被篡改的模块被编译
  • 确保团队成员或 CI 下载的是一致的依赖
  • 自动生成,不建议手动修改

示例内容:

1
2
rsc.io/quote v1.5.2 h1:w5fcysjrx7yqtD/aO+QwRjYZOKnaM9Uh2b40tElTs3Y=
rsc.io/quote v1.5.2/go.mod h1:LzX7hefJvL54yjefDEDHNONDjII0t9xZLPXsUe+TKr0=

go.work—工作区文件(可选,Go 1.18+)

用于管理多个 Go 模块组成的工作区,支持跨模块开发,解决 monorepo 场景下的依赖问题。

使用场景:

  • 一个项目下有多个模块(例如微服务或工具库),需要一起开发和测试
  • 替代 replace 用于本地联调多个模块

示例内容:

1
2
3
4
5
6
go 1.24

use (
./moduleA
./moduleB
)

命令清单

官网学习中遇到的命令顺序

1
2
3
4
5
6
7
8
9
go mod init example/hello
go mod edit -replace example.com/greetings=../greetings
go mod tidy
go run .
go test .
go build
go list -f '{{.Target}}'
go env -w GOBIN=C:\Users\Administrator\go\bin
go install

初始化与模块管理

命令 说明
go mod init <模块名> 初始化模块(生成 go.mod)
go mod tidy 自动添加/删除依赖
go mod download 下载 go.mod 中声明的所有依赖到本地
go mod vendor 将依赖复制到 vendor/ 目录中
go mod verify 校验模块缓存
go list -m all 查看所有依赖模块

构建与运行

命令 说明
go run <file.go> 编译并运行 Go 源码文件
go run . 编译并运行当前目录的 main
go build 编译当前包,生成可执行文件(二进制文件)
go build -o myapp 指定输出文件名
go install 编译并安装当前模块(安装到 $GOBIN$GOPATH/bin
go clean 清除当前模块下的构建产物,包括编译生成的二进制文件和中间文件
go clean -modcache 清除全局的模块缓存(即下载的第三方依赖)

测试

命令 说明
go test 运行当前包的测试用例
go test -v 显示详细的测试输出
go test ./... 递归测试当前模块的所有包(包括子包)
go test -cover 查看测试覆盖率
go test -bench . 执行基准测试(以 Benchmark 开头的函数)

代码工具

命令 说明
go fmt ./... 格式化所有 Go 文件
go vet 静态代码分析(找潜在 bug)(推荐)
go doc <包名/函数> 查看文档,如:go doc fmt.Println
go list 列出当前模块信息
go list -m -u all 列出当前模块依赖的所有模块,以及每个模块的最新版本:
go list -m -u example.com/theirmodule 显示特定模块的最新版本
go list -f '{{.Target}}' 打印可编译包的目标文件路径
go list -json 输出包的所有结构化信息(JSON 格式)

工具命令

命令 说明
go version 查看 Go 版本
go env 查看 Go 环境变量
go env -w GOBIN=C:\path\to\your\bin 指定 Go 程序安装目录
go help <命令> 查看某个命令帮助,比如 go help mod

第三方包安装

命令 说明
go get . 添加模块中某个包的所有依赖项
go get <module> 安装或升级某个包(Go 1.17 及以前)
go install <module>@latest Go 1.18+ 推荐方式安装工具包

示例:安装一个工具(如静态分析器)

1
2
// golangci-lint 是 Go 语言中最流行的 静态代码分析工具,它相当于一个多合一的“代码质量检查器”
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest