14.Go命令
Go语言自带有一套完整的命令行操作,可以在终端中执行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
work workspace 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
goproxy module proxy protocol
importpath import path syntax
modules modules, module versions, and more
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.
这些命令对于我们在日常编写代码时非常有用,来看看一些常用的命令
14.1 go help
go help
主要用于查看各基本命令的使用帮助,其基本用法如下所示:
go help <topic>
14.2 go env
go env
主要用于输出Go语言的环境信息,基本用法如下所示:
go env [-json] [-u] [-w] [var ...]
使用go env
输出的信息如下所示:
set GO111MODULE=
set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\Surpass\AppData\Local\go-build
set GOENV=C:\Users\Surpass\AppData\Roaming\go\env
set GOEXE=.exe
set GOEXPERIMENT=
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOINSECURE=
set GOMODCACHE=C:\Users\Surpass\Documents\GolangProjets\pkg\mod
set GONOPROXY=
set GONOSUMDB=
set GOOS=windows
set GOPATH=C:\Users\Surpass\Documents\GolangProjets
set GOPRIVATE=
set GOPROXY=https://goproxy.cn,direct
set GOROOT=D:\Program Files\Go
set GOSUMDB=sum.golang.org
set GOTMPDIR=
set GOTOOLCHAIN=auto
set GOTOOLDIR=D:\Program Files\Go\pkg\tool\windows_amd64
set GOVCS=
set GOVERSION=go1.22.5
set GCCGO=gccgo
set GOAMD64=v1
set AR=ar
set CC=gcc
set CXX=g++
set CGO_ENABLED=0
set GOMOD=NUL
set GOWORK=
set CGO_CFLAGS=-O2 -g
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-O2 -g
set CGO_FFLAGS=-O2 -g
set CGO_LDFLAGS=-O2 -g
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m64 -fno-caret-diagnostics -Qunused-arguments -Wl,--no-gc-sections -fmessage-length=0 -ffile-prefix-map=C:\Users\Surpass\AppData\Local\Temp\go-build4139409939=/tmp/go-build -gno-record-gcc-switches
常见的信息如下所示:
参数 | 说明 |
---|---|
CGO_ENABLED | 是否启用CGO工具 |
GOARCH | 程序编译构建的目标CPU架构 |
GOHOSTARCH | 程序运行环境的目标CPU架构 |
GOEXE | 可执行文件的后缀 |
GOOS | 程序编译构建的目标操作系统 |
GOHOSTOS | 程序运行环境的目标操作系统 |
GOPATH | 工作目录的绝对路径 |
GOROOT | Go语言安装目录的绝对路径 |
GOPROXY | 项目依赖的源镜像地址 |
日常使用较多的是用于设置相应的环境变量信息,示例如下所示:
// 取消环境变量
go env -u GOPROX
// 设置环境变量
go env -w GOPROXY="https://goproxy.cn,direct"
14.3 go build
这个命令主要用于编译构建,在编译构建过程中,会将相关依赖项一起编译为一个可执行的文件。基本用法如下所示:
go build [-o output] [build flags] [packages]
go build
用法比较简洁,所有参数都可以忽略,这个时间则意味着使用当前目录进行编译构建,以下几种用法是等价的。
go build
go build .
go build main.go
以上三种用法,都是使用当前的目录编译构建,因为忽略了package
。实际上go build
本质上是需要一个路径的,让编译器可以根据package包来决定编译哪些go文件。package是一个相对路径,而且是相对于GOROOT
和GOPATH
这两个环境变量。因此在指定了package参数后,go build 就知道需要编译构建了哪些go文件,例如:
go build surpass.net/calcs
以上这种方式是指定了包的方式,除此之外也可以使用通配符,如下所示:
go build surpass.net/calcs/...
... 表示匹配所有字符串,这样就会构建calcs目录中所有go包
go build默认基于当前平台进行构建支持该平台的可执行文件。但另外一个功能就是支持跨平台编译构建
,使得我们可以在任何一个平台上编译构建出其他平台的可执行文件。而在Go环境变量中GOOS
和GOARCH
分别代表编译构建目录的操作系统和CPU架构平台,可用值如下所示:
GOOS | GOARCH |
---|---|
aix | ppc64 |
android | 386 |
android | amd64 |
android | arm |
android | arm64 |
darwin | amd64 |
darwin | arm64 |
dragonfly | amd64 |
freebsd | 386 |
freebsd | amd64 |
freebsd | arm |
illumos | amd64 |
ios | arm64 |
js | wasm |
linux | 386 |
linux | amd64 |
linux | arm |
linux | arm64 |
linux | loong64 |
linux | mips |
linux | mipsle |
linux | mips64 |
linux | mips64le |
linux | ppc64 |
linux | ppc64le |
linux | riscv64 |
linux | s390x |
netbsd | 386 |
netbsd | amd64 |
netbsd | arm |
openbsd | 386 |
openbsd | amd64 |
openbsd | arm |
openbsd | arm64 |
plan9 | 386 |
plan9 | amd64 |
plan9 | arm |
solaris | amd64 |
wasip1 | wasm |
windows | 386 |
windows | amd64 |
windows | arm |
windows | arm64 |
以上环境变量取值可以参考:https://go.dev/doc/install/source#environment
如果需要生成支持不同平台架构的可执行程序,只需要改变环境变量GOOS
和GOARCH
这两个环境变量就可以了,示例如下所示:
GOOS=linux GOARCH=arm64 go build main.go
更多关于
go build
用法可以使用命令go help build
查看
14.4 go run
go run
命令主要用于编译构建源文件并执行可执行文件。基本用法如下所示:
go run [build flags] [-exec xprog] package [arguments...]
14.5 go get
go get
命令主要用于从指定地址下载第三方依赖包,并对其进行编译和安装,基本用法如下所示:
go get [-t] [-u] [-v] [build flags] [packages]
示例用法如下所示:
// 下载最新代码
go get example.com/pkg
// 下载指定版本的代码
go get example.com/pkg@v1.2.0
// 删除依赖包
go get example.com/pkg@none
14.6 go install
go install
主要用于编译构建并安装指定的代码包及其依赖项,在实际运行时会分为两个步骤生成可执行文件和将生成的可执行文件复制至GOPATH或GOPATH/bin目录中,基本用法如下所示:
go install [build flags] [packages]
14.7 go test
go test
主要用于对Go语言编写的程序进行测试。基本用法如下所示:
go test [build/test flags] [packages] [build/test flags & test binary flags]
go test
测试是以代码包为单位的,其中测试文件是_test.go
做为后缀,里面包含若干测试函数的源文件,其中测试函数一般是以Test做为前缀的,且有一个类型为testing.T
的参数。
14.8 go vet
go vet
主要用于检查Go语言源码中的静态错误的工具,其基本用法如下所示:
go vet [build flags] [-vettool prog] [vet flags] [packages]
14.9 go fmt
go fmt
主要用于自动化格式化源码,其基本用法如下所示:
go fmt [-n] [-x] [packages
14.10 go clean
go clean
命令主要用于删除执行其他命令产生的一些文件和目录,主要包括:
- 删除
go build
命令时在当前包下生成的可执行文件 - 删除
go test
命令产生的以.test做为后缀的文件
基本用法如下所示:
go clean [clean flags] [build flags] [packages]
14.11 go doc
go doc
主要用于查询相关包、函数、方法或变量的用法,其基本用法如下所示:
go doc [doc flags] [package|[package.]symbol[.methodOrField]]
示例用法如下所示:
C:\Users\Surpass>go doc fmt.Println
package fmt // import "fmt"
func Println(a ...any) (n int, err error)
Println formats using the default formats for its operands and writes to
standard output. Spaces are always added between operands and a newline
is appended. It returns the number of bytes written and any write error
encountered.
14.12 go mod
go mod
主要用于创建go.mod文件,可以在任何目录中使用,其基本用法如下所示:
Usage:
go mod <command> [arguments]
The commands are:
download download modules to local cache
edit edit go.mod from tools or scripts
graph print module requirement graph
init initialize new module in current directory
tidy add missing and remove unused modules
vendor make vendored copy of dependencies
verify verify dependencies have expected content
why explain why packages or modules are needed
常用的命令如下所示:
- init: 在当前文件夹下初始化一个新的module,并创建go.mod文件
- tidy: 自动分析依赖项并下载缺失的模块,也可以删除未使用的依赖项,并更新go.mod文件
示例如下所示:
C:\Users\Surpass>go mod init surpass.net
go: creating new go.mod: module surpass.net
go: to add module requirements and sums:
go mod tidy
初始化的go.mod文件如下所示:
module surpass.net
go 1.22.5
14.13 go tool pprof
go tool pprof
主要用于Go开启过程中的性能调优,其基本用法如下所示:
go tool pprof <format> [options] [binary] <source> ...
Golang内置了获取程序运行数据的工具,包括以下两个标准库:
runtime/pprof
: 采集工具型应用运行数据进行分析net/http/pprof
: 采集服务型应用运行时数据进行分析
pprof开启后,每隔一段时间(10ms)就会收集当前的堆栈信息,获取各个函数占用的CPU以及内存资源,然后通过对这些采样数据进行分析,形成一个性能分析报告。性能优化主要有以下几个方面:
- CPU Profile:报告程序CPU的使用情况,按照10ms间隔去采集应用程序在CPU和寄存器上面的数据。
- Memory Profile(Heap Profile):报告程序的内存使用情况,其实就是程序运行过程中堆内存的分配情况,默认每分配512K字节时取样一次。
- Block Profiling: 报告goroutines不在运行状态的情况,保存用户程序中的Goroutine阻塞事件的记录,可以用来分析和查找死锁等性能瓶颈。
- Goroutine Profiling: 报告goroutines的使用情况,有哪些roroutines,它们的调用关系是怎样的。
作者: Surpassme
来源: http://www.jianshu.com/u/28161b7c9995/
http://www.cnblogs.com/surpassme/
声明:本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出 原文链接 ,否则保留追究法律责任的权利。如有问题,可发送邮件 联系。让我们尊重原创者版权,共同营造良好的IT朋友圈。