Go 语言(Golang)以其简洁、高效的设计理念,成为了开发人员的热门选择。对于 Go 开发者来说,掌握常用的命令行工具是提高工作效率的关键。本文将介绍 Go 语言的一些常用命令及其应用,帮助开发者更好地理解和使用 Go 工具链。
假如你已安装了golang环境,你可以在命令行执行go命令查看相关的Go语言命令:

vbnet
➜ ~ go
Go is a tool for managing Go source code.
Usage:
go <command> [arguments]
The commands are:
bug start a bug report
build compile packages and dependencies
clean remove object files and cached files
doc show documentation for package or symbol
env print Go environment information
fix update packages to use new APIs
fmt gofmt (reformat) package sources
generate generate Go files by processing source
get add dependencies to current module and install them
install compile and install packages and dependencies
list list packages or modules
mod module maintenance
run compile and run Go program
test test packages
tool run specified go tool
version print Go version
vet report likely mistakes in packages
Use "go help <command>" for more information about a command.
Additional help topics:
buildconstraint build constraints
buildmode build modes
c calling between Go and C
cache build and test caching
environment environment variables
filetype file types
go.mod the go.mod file
gopath GOPATH environment variable
gopath-get legacy GOPATH go get
goproxy module proxy protocol
importpath import path syntax
modules modules, module versions, and more
module-get module-aware go get
module-auth module authentication using go.sum
packages package lists and patterns
private configuration for downloading non-public code
testflag testing flags
testfunc testing functions
vcs controlling version control with GOVCS
Use "go help <topic>" for more information about that topic.
➜ ~
重点记忆
Go语言中的go
命令是开发者的主要工具集,通过它可以完成编译、构建、测试、依赖管理等任务。以下是常见的go
命令、其用途、使用场景以及子命令的详细说明,并附上相应的示例。
1. go run
arduino
go run [files]
- 用途:编译并运行指定的Go源文件,不生成可执行文件。
- 使用场景:用于快速执行Go代码,尤其在开发初期或快速验证某个功能时。
- 示例:
go
go run main.go
上面命令会编译并立即运行main.go
文件,运行完成后,再把编译后的文件立即进行删除。
2. go build
css
go build [packages]
- 用途:编译Go代码,生成二进制可执行文件。
- 使用场景:用于构建项目或包,可以生成用于发布的可执行文件。
- 示例:
go
go build main.go
会在当前目录下生成一个可执行文件(名称由package main
指定)。
- 子命令:
-
go build -o [output]
: 指定生成的二进制文件的名称。
go
go build -o myapp main.go
3. go install
go
go install [package]
- 用途 :编译并将可执行文件安装到
$GOPATH/bin
目录下。 - 使用场景:当你希望将项目安装到系统路径下,使其可以在任何地方通过命令行执行时使用。
- 示例:
bash
go install ./...
编译并安装当前模块中的所有包到$GOPATH/bin
中。
4. go test
bash
go test [packages]
- 用途 :运行Go测试框架,会自动检测并执行
*_test.go
文件中的测试函数。 - 使用场景:单元测试、功能测试、集成测试等。
- 示例 :运行当前目录及其所有递归子目录 的
*_test.go
文件中的测试函数
bash
go test ./...
会执行当前模块中的所有测试文件。
- 子命令:
-
go test -v
: 输出详细的测试结果。go test -cover
: 显示代码覆盖率。go test -v -run="TestXX"
: 指定测试的方法,支持正则go test xx.go xx_test.go
: 指定运行的测试文件,及其依赖文件。go test
: 等于go test .
默认只允许当前目录下的所有测试文件,不含子目录
bash
go test -v -cover
bash
// /user/xx/goProject/
go test 软件包 chengxuyuanermao/goProject
go test 绝对路径 /user/xx/goProject/
go test 相对路径 ./ 或 . 或 不填
go test . 等同于
go test ./
5. go mod
bash
go mod <command>
- 用途:管理Go模块及其依赖。
- 使用场景 :用于项目依赖管理,自从Go 1.11开始,Go引入了模块管理模式替代
GOPATH
模式。 - 常用子命令:
-
go mod init <module-path>
:初始化一个新的模块并生成go.mod
文件。
bash
go mod init github.com/user/myproject
-
go mod tidy
:移除未使用的依赖并下载缺失的依赖。
go
go mod tidy
-
go mod vendor
:将依赖项复制到vendor/
目录。
go
go mod vendor
6. go clean
css
go clean [flags]
- 用途:清理Go编译过程中生成的临时文件和缓存。
- 使用场景:用于清理构建生成的临时文件或缓存。
- 示例:
go
go clean
会清理当前项目的构建产物。
7. go fmt
bash
go fmt [packages]
- 用途:格式化Go代码,使其符合Go的标准格式。
- 使用场景:自动化的代码格式化工具,通常在开发过程中用于保持代码整洁。
- 示例:
bash
go fmt ./...
会格式化当前模块中的所有Go文件。现代的 ide 如 vscode 或 goland 保存的时候都会帮你格式化。
8. go vet
css
go vet [packages]
- 用途:静态代码分析工具,检查代码中的潜在问题和常见错误。
- 使用场景 :在提交代码之前,可以通过
go vet
检查代码中是否有潜在的bug或低效的代码。 - 示例:
bash
go vet ./...
会对当前模块中的所有包进行检查。现代的 ide 如 vscode 或 goland 会帮你实时检查。
9. go get
go
go get [package]
- 用途:从远程仓库下载并安装Go包到当前项目中。
- 使用场景:用于获取远程依赖库或升级现有依赖包。
- 示例:
arduino
go get github.com/gin-gonic/gin
会从GitHub获取Gin框架并添加到项目的依赖中。
10. go list
go
go list [package]
- 用途:列出包的信息,包括其导入路径和依赖关系。
- 使用场景:用于调试依赖关系或查看项目结构。
- 示例:
bash
go list ./...
会列出当前模块中所有包的信息。
11. go doc
css
go doc [package] [symbol]
- 用途:查看Go代码的文档信息。
- 使用场景:用于查看函数、结构体、接口等的文档说明,帮助开发者快速了解其用法。
- 示例:
go
go doc fmt.Println
会显示fmt.Println
函数的文档说明。
12. go env
bash
go env
- 用途:查看Go的环境变量配置。
- 使用场景:当需要调试或修改Go的工作路径、缓存路径时使用。
- 示例:
bash
go env
会显示当前Go环境的所有配置,如GOROOT
、GOPATH
等。
13. go tool
css
go tool <tool> [flags]
- 用途:执行Go语言的低级工具,如编译器、汇编工具等。
- 使用场景:用于调试和分析Go程序的工具集。
- 示例:
go
go tool compile -S main.go
会显示main.go
的汇编代码。
详情查看:go tool 命令一览
14. go generate
css
go generate [packages]
- 用途:运行代码生成工具,根据注释中的指令自动生成代码。
- 使用场景:当需要通过工具生成特定代码(如mock、protobuf文件)时使用。
- 示例:
bash
//go:generate stringer -type=Pill
执行go generate
会运行上面的生成器命令。
15. go version
go
go version
- 用途:显示当前Go的版本号。
- 使用场景:用于查看当前安装的Go版本,确认开发环境。
- 示例:
go
go version
会显示Go版本号,如:go version go1.20.3 linux/amd64
。
16. go fix
css
go fix [packages]
- 用途:更新Go代码以使用最新的语言功能和标准库。
- 使用场景:用于将老版本的Go代码迁移到最新版本,修正因语言或库变化导致的代码不兼容问题。
- 示例:
bash
go fix ./...
命令汇总
命令 | 用途 | 使用场景 |
---|---|---|
go run |
编译并运行Go程序,不生成可执行文件 | 快速运行Go代码 |
go build |
编译Go代码,生成可执行文件 | 构建项目或生成可执行文件 |
go install |
编译并安装到$GOPATH/bin |
安装Go程序以便全局使用 |
go test |
运行测试代码 | 单元测试、集成测试等 |
go clean |
清理构建产物和缓存 | 清理编译时生成的文件 |
go fmt |
格式化Go代码 | 保持代码风格一致 |
go vet |
静态分析代码,检查潜在的错误 | 提交代码前进行代码检查 |
go mod |
管理Go模块及其依赖 | 管理项目的依赖关系和模块化 |
go get |
下载并安装远程包 | 获取远程依赖包 |
go list |
列出包的信息 | 查看包结构和依赖关系 |
go doc |
显示Go包或符号的文档 | 查看函数、结构体等的使用说明 |
go env |
显示Go环境变量 | 调试Go环境配置 |
go tool |
使用低级工具 | 调试或分析Go程序 |
go generate |
根据注释生成代码 | 自动化代码生成 |
go version |
显示当前Go版本 | 查看Go版本信息 |
go fix |
修正老版本代码以适应最新的Go标准 | 升级和维护Go代码兼容性 |
这些命令覆盖了Go项目的开发、构建、测试、发布等各个环节,帮助开发者高效管理Go项目。
注意区分
- 编译包文件 无main包 将编译后的包文件放到 pkg 目录下($GOPATH/pkg/darwin_arm64).a 文件
- 编译生成可执行文件 有main包 将可执行文件放到 bin 目录($GOPATH/bin)可执行文件
类似于leafserver项目的解决方式
GOPATH模式 找包都是在 GOPATH/src 下找的
GOMODULE模式 找包是在 GOPATH/pkg/mod 下找的
GOMODULE模式 项目下,有 go.sum go.mod 文件
总结
Go 语言提供了一套功能强大的命令行工具,能够帮助开发者高效地进行代码编译、依赖管理、测试、格式化等工作。通过熟练掌握这些常用命令,开发者可以更好地进行项目管理和开发,从而提高整体工作效率。
常用的 Go 命令包括:
go run
:直接运行 Go 程序。go build
:编译 Go 程序并生成二进制文件。go get
:获取并安装依赖包。go mod
:管理 Go 项目的模块和依赖。go test
:运行单元测试。go fmt
:格式化 Go 代码。go clean
:清理临时文件。go doc
:查看 Go 文档。
掌握这些命令将使你在 Go 开发过程中事半功倍,提升编程效率。