跳转至

Go语言工具

4.1 官方工具

go get

该命令可以根据要求和实际情况从互联网上下载或更新指定的代码包及其依赖包,下载后自动编译,一般引用依赖用go get就可以了。

Text Only
go get -u "github.com/VictoriaMetrics/fastcache"

参考 https://www.kancloud.cn/cattong/go_command_tutorial/261349

go build

Text Only
go build [-o 输出名] [-i] [编译标记] [包名]

该命令用于编译我们指定的源码文件或代码包以及它们的依赖包。命令的常用标记说明如下

标记名称 标记描述
-o output-file 指定输出文件名。默认情况下,可执行文件的名称将与当前目录的名称相同(如果是 main 包的话),或者包名将成为生成的库文件名
-i 安装构建的包和依赖项到 $GOPATH/pkg 目录,以便后续构建可以重用它们
-a 强制重新构建所有包,即使它们已经是最新的。
-v 显示详细的构建日志,包括正在编译的包名和文件路径。
-x 打印正在执行的编译命令。
-race 启用数据竞争检测,用于检查并发程序中的竞态条件。
-ldflags flags 向链接器传递额外的标志。可以用于指定链接时的额外信息,如版本信息、构建时间等。
-mod mode 设置模块支持模式(可选值:readonly,vendor,mod,auto)。
-work 打印临时工作目录的名称,并在退出时不删除它(少用)。
-n 仅打印输出build需要的命令,不执行build动作(少用)。
-p n 开多少核cpu来并行编译,默认为本机CPU核数(少用)。
-msan 启用与内存消毒器的互操作。仅支持linux / amd64,并且只用Clang / LLVM作为主机C编译器(少用)。

编译过程输出到文件:go build -x > result 2>&1,因为go build -x 最终是将日志写到标准错误流当中。

如果只在编译特定包时需要指定参数,可以参考包名=参数列表的格式,比如go build -gcflags='log=-N -l' main.go

参考:

go install

该命令用于编译并安装指定的代码包及它们的依赖包。当指定的代码包的依赖包还没有被编译和安装时,该命令会先去处理依赖包。与go build命令一样,传给go install命令的代码包参数应该以导入路径的形式提供。

并且,go build命令的绝大多数标记也都可以用于go install命令。实际上,go install命令只比go build命令多做了一件事,即:安装编译后的结果文件到指定目录。

参考:https://www.kancloud.cn/cattong/go_command_tutorial/261348

go fmt和gofmt

Golang的开发团队制定了统一的官方代码风格,并且推出了gofmt工具(gofmt或go fmt)来帮助开发者格式化他们的代码到统一的风格。

gofmt是一个cli程序,会优先读取标准输入,如果传入了文件路径的话,会格式化这个文件,如果传入一个目录,会格式化目录中所有.go文件,如果不传参数,会格式化当前目录下的所有.go文件。

gofmt默认不对代码进行简化,使用-s参数可以开启简化代码功能

gofmt是一个独立的cli程序,而go中还有一个go fmt命令,go fmt命令是gofmt的简单封装。go fmt在调用gofmt时添加了-l -w参数,相当于执行了gofmt -l -w

参考:https://blog.csdn.net/whatday/article/details/97682094

go env

该命令用于打印Go语言的环境信息,常见的通用环境信息如下:

变量 含义
GOROOT go 语言安装时所在的目录绝对路径
GOPATH 工作区所在的绝对目录
GOVERSION 安装的 Go 版本
GOENV Go 环境变量配置文件的位置。不能使用 ‘go env -w’ 设置。若设置 GOENV=off 将禁用默认配置文件的使用。
GOOS 编译代码的操作系统名称(比如 linux,windows,darwin 等)
GOARCH 计算机处理器的架构(比如 amd64,386,arm 等)
GOPROXY Go Modules 的代理地址(URL),用于加速下载 Go 模块
GOSUMDB 要使用的校验和数据库的名称以及可选的公钥和URL。详见 https://golang.org/ref/mod#authenticating
GOPRIVATE
GONOPROXY
GONOSUMDB
以 glob 模式表示的模块路径,多个使用逗号分隔。这些模式应该总是直接获取,不走代理拉去,且不参与校验。详见 https://golang.org/ref/mod#private-modules
GOCACHE 存储编译后信息的缓存目录
GODEBUG 启用各种调试工具。详见https://go.dev/doc/godebug。
GO111MODULE 用于控制 Go Modules 的行为,可以设置为 on、off 或 auto。
  • 如果设置为 on,则 Go Modules 模式将被启用;
  • 如果设置为 off,则禁用 Go Modules 模式;
  • 如果设置为 auto,则根据当前目录下是否存在 go.mod 文件来判断是否启用 Go Modules 模式。
    在 Go 1.13 中,GO111MODULE 的默认值为 auto,即自动启用 Go Modules 模式。这意味着,如果在项目目录下存在 go.mod 文件,则会自动启用 Go Modules 模式,否则会使用传统的 GOPATH 模式。
  • GOINSECURE 表示以 glob 模式表示的模块路径,多个使用逗号分隔。支持以不安全的 HTTP 连接下载模块
    GOMAXPROCS 用于控制 Go 程序中可同时执行的最大 CPU 数量。默认值为 CPU 核心数量。可以通过设置 GOMAXPROCS 的值来提高程序的并发性能。

    查看所有 Go 环境变量可使用命令:go help environment

    参考:go env 命令详解 腾讯云