go命令行工具
go是Go语言自带的命令行工具,它内部集成了很多功能,包括安装依赖、编译构建项目、运行单元测试等,基本能够满足Go语言工程开发的整个生命周期。这篇笔记我们简单了解go命令行工具的使用。
命令格式
go命令行工具的使用格式如下,其中<command>是具体调用的工具,[arguments]是工具所需的参数。
go <command> [arguments]
查看帮助信息
在使用具体的某一个命令前,我们可以先使用go help查看帮助信息。
go help <command>
go run
go run命令用于临时编译运行单个.go文件或多个.go文件,它会在临时目录编译并执行二进制文件,执行后临时文件会被删除。
go run main.go
go build
go build用于构建整个项目,生成二进制可执行文件。我们可以使用-o选项设置编译结果的文件名和输出路径,此外后面也可以带上具体的包目录,如果不指定包目录则编译的是当前包,编译的包目录如果是main包则会生成可执行文件。
go build -o server ./cmd/
此外,go命令行工具对于交叉编译的支持非常完善,我们可以通过配置GOOS、GOARCH等环境变量设置编译目标,如果需要交叉编译,我们可以先执行以下命令查看目标平台是否被支持。
go tool dist list
如果确认目标平台是受支持的,那么我们在官方文档中搜索需要设定哪些环境变量,然后执行编译命令就可以了。
go test
go test命令用于执行单元测试,我们也可以指定包目录来执行单元测试。
go test ./mypackage
go get
go get用于安装第三方依赖包,它可以从远程代码仓库(如Github)下载代码包。
go get example.com/mypackage
go get安装成功后会在项目路径下的go.mod中写入相关依赖信息,此外还会生成一个go.sum文件,它用于锁定依赖版本,作用类似于npm的package-lock.json,我们需要将其提交到版本控制系统中。如果要拉取特定的包版本,可以通过Git仓库的Tag或分支来指定,使用形如go get github.com/demoproject/demo@v1.0的命令。
注:拉取的源码实际上不在我们的工程中,而是在$GOPATH/pkg/mod目录下。
go mod
go mod是Go语言的模块管理工具,go mod init用于创建模块。
go mod init mymodule
go mod tidy能够清理未使用的依赖并更新go.mod和go.sum文件。
go mod tidy
go mod download用于根据go.mod和go.sum下载依赖。
go mod download
其它命令
go env用于打印所有和go命令行工具构建相关的环境变量,go命令行工具的一些参数是通过环境变量指定的,打印这些信息能够方便我们查看和调整这些配置。
go env
go fmt用于格式化代码,不过我们开发Go语言程序的IDE通常都可以配置为自动调用格式化工具,因此通常不需要我们手动执行该命令。
go fmt
go clean命令用于清理编译输出的文件和缓存等。
go clean