菜鸟科技网

go shell命令

本文将按照从入门到精通的顺序,介绍最常用和最重要的 go 命令。

go shell命令-图1
(图片来源网络,侵删)

环境准备与验证

在开始之前,确保你已经安装了 Go 语言环境。

go version

这个命令用于检查 Go 的版本号,同时也能验证 Go 是否已正确安装并配置了环境变量 PATH

# 查看当前 Go 版本
go version
# 示例输出
go version go1.21.0 darwin/arm64

go env

这个命令会打印出当前 Go 环境的所有配置信息,GOPATH, GOROOT, GOOS, GOARCH 等,这对于排查环境问题非常有用。

go env
# 示例输出 (部分)
GO111MODULE="on"
GOARCH="arm64"
GOOS="darwin"
GOPATH="/Users/yourname/go"
GOROOT="/usr/local/go"
...

项目初始化与构建

这是开发一个新项目时最先用到的命令。

go shell命令-图2
(图片来源网络,侵删)

go mod init

在你的项目根目录下运行此命令,它会初始化一个 Go 模块,这会创建一个 go.mod 文件,该文件是项目的依赖管理核心。

# 创建一个新项目目录
mkdir myproject
cd myproject
# 初始化 Go 模块,模块名通常是项目路径或组织/项目名
go mod init github.com/yourname/myproject
# 执行后,会生成一个 go.mod 文件类似:
# module github.com/yourname/myproject
# go 1.21

go build

这是最核心的构建命令,用于将 Go 源代码编译成可执行的二进制文件。

# 在当前目录下编译,生成的可执行文件名为 main (如果主包是 main)
go build
# 指定输出的可执行文件名
go build -o myapp
# 编译指定目录下的所有 Go 文件
go build ./...
# 交叉编译:为不同的操作系统和架构编译
# 在 macOS (darwin/arm64) 上编译 Linux (linux/amd64) 版本
GOOS=linux GOARCH=amd64 go build -o myapp-linux

go run

这个命令非常方便,它会直接编译并运行你的程序,非常适合快速开发和测试,它不会生成中间的可执行文件。

# 运行当前目录下的 main.go
go run .
# 运行指定的文件
go run main.go server.go
# 运行指定目录下的所有 Go 文件
go run ./...

依赖管理

Go 1.11 之后官方推荐使用 Go Modules 进行依赖管理。

go shell命令-图3
(图片来源网络,侵删)

go get

用于添加或更新项目依赖。

# 添加一个最新的依赖包
go get github.com/gin-gonic/gin
# 添加特定版本的依赖
go get github.com/some/lib@v1.2.3
# 升级到最新的次要版本 (例如从 v1.2.x 升级到 v1.3.x)
go get github.com/some/lib@latest
# 升级到最新的主版本 (例如从 v1.x 升级到 v2.x)
go get github.com/some/lib@upgrade
# 移除一个依赖
go get github.com/some/lib@none

go mod tidy

这个命令会整理你的 go.modgo.sum 文件,它会:

  • 添加 go.mod 中缺失的依赖。
  • 移除不再被代码使用的依赖。
  • 更新 go.sum 文件,确保所有依赖的哈希值都正确。

这是一个非常常用且重要的命令,建议在每次更新或修改依赖后运行它。

go mod tidy

go mod vendor

此命令会创建一个 vendor 目录,并将所有项目依赖的源代码复制到这个目录中,这可以用于构建一个不依赖网络、自包含的项目,或者在某些不支持 Go Modules 的旧环境中使用。

go mod vendor

代码测试

Go 拥有内置的测试框架,使用非常简单。

go test

这是运行测试的命令,Go 会自动寻找所有以 _test.go 结尾的文件,并执行其中的测试函数。

# 运行当前目录下的所有测试
go test
# 运行并打印详细输出
go test -v
# 运行并显示测试覆盖率
go test -cover
# 运行并生成覆盖率报告文件
go test -coverprofile=coverage.out
go tool cover -html=coverage.out # 在浏览器中查看报告
# 运行指定的测试文件或函数
go test -run TestMyFunction
go test -run TestMyFunction/SubTest

代码格式化与静态分析

go fmt

Go 强制代码风格统一,go fmt 会自动将你的代码格式化为官方推荐的风格。强烈建议在提交代码前运行此命令。

# 格式化当前目录下的所有 Go 文件
go fmt .
# 也可以使用更严格的格式化工具 goimports (需要安装)
go install golang.org/x/tools/cmd/goimports@latest
goimports -w .

go vet

go vet 是一个静态分析工具,它不会检查语法错误,而是会检查可能导致运行时错误的代码逻辑问题,fmt.Printf 的参数类型不匹配、空指针解引用等,它能在编译阶段就发现很多潜在 Bug。

# 分析当前目录下的所有 Go 文件
go vet .
# 分析指定包
go vet ./mylib

代码文档

go doc

这是一个强大的命令行工具,用于查看 Go 包和代码的文档。

# 查看某个包的文档
go doc fmt
# 查看包中的某个函数
go doc fmt.Printf
# 查看当前包中的某个函数
go doc MyFunction
# 在浏览器中打开文档
go doc -http=:6060
# 然后访问 http://localhost:6060 即可看到所有标准库和项目文档

godoc

godoc 是一个独立的文档服务器,功能比 go doc 更强大,可以生成并托管一个完整的网站来展示你的代码文档。

# 安装 godoc (go 命令不带)
go get golang.org/x/tools/cmd/godoc
# 启动文档服务器
godoc -http=:6060
# 访问 http://localhost:6060/pkg/ 即可查看所有已安装包的文档

其他常用命令

go clean

用于清理编译过程中生成的文件,如可执行文件、测试缓存、编译缓存等。

# 清理当前目录下的可执行文件
go clean
# 清理所有编译生成的文件,包括测试缓存
go clean -cache -testcache

go list

用于列出包的信息,功能非常强大,常用于脚本和自动化。

# 列出当前模块的所有直接依赖
go list -m all
# 列出所有导入的包
go list ./...
# 查找包含特定字符串的包
go list -f '{{.ImportPath}}' all | grep "github.com/some"

总结与最佳实践

命令 功能 使用场景
go version 检查 Go 版本 验证安装、CI/CD 环境检查
go env 查看 Go 环境变量 排查环境问题
go mod init 初始化 Go 模块 创建新项目第一步
go build 编译代码 构建生产环境可执行文件
go run 编译并运行代码 本地快速开发和测试
go get 获取/更新依赖 添加/修改项目依赖
go mod tidy 整理依赖 保持 go.modgo.sum 干净
go test 运行测试 单元测试、集成测试
go fmt 格式化代码 代码提交前,保证风格统一
go vet 静态分析 代码提交前,发现潜在 Bug
go doc 查看文档 快速了解包和函数用法

一个典型的开发流程:

  1. 创建项目:mkdir myapp && cd myapp
  2. 初始化模块:go mod init myapp
  3. 编写代码:vim main.go
  4. 运行测试:go test -v
  5. 格式化代码:go fmt .
  6. 静态分析:go vet .
  7. 运行程序:go run .
  8. 添加依赖:go get github.com/...
  9. 整理依赖:go mod tidy
  10. 构建最终产物:go build -o myapp

掌握这些 go 命令,你就能高效地完成绝大多数 Go 项目的日常开发任务。

分享:
扫描分享到社交APP
上一篇
下一篇