1
以下命令基于go版本1.15.3进行测试

基本命令

go help
go env
go version

交叉编译

# Windows下编译Linux

SET CGO_ENABLED=0
SET GOARCH=amd64
SET GOOS=linux

go build xx.go

go build

  • go build 会利用go语言的并发特性提高编译速度
  • 当编译包时,会自动忽略'_test.go'的测试文件。

常用参数 -o -i

-o 指定编译输出可执行文件名称

-i 会安装编译目标所依赖的包

# go build -o 指定编译输出的名称 
# win下编译生成指定名称的可执行文件
go build -o custom.exe send.go  

# 压缩编译后的体积
# go build -ldflags="-s -w" xxx.go

go build

go install

用来安装指定的代码包以及他们的依赖包(安装编译后的结果文件到指定目录)

主要用来库和工具

  • 编译包文件 无main包 将编译后的包文件放到 pkg 目录下($GOPATH/pkg)
  • 编译生成可执行文件 有main包 将可执行文件放到 bin 目录($GOPATH/bin)

go install
go install

go get

借助代码管理工具通过远程拉取或更新代码包及其依赖包,并自动完成编译和安装

分两步,下载源码包,执行 go install

gofmt 和 go fmt

go fmt 是 gofmt的简易封装

go fmt 即 gofmt -l -w

传入文件的话,会格式化这个文件。传入目录的话,会格式化该目录下的所有.go文件

// 常用go fmt
go fmt send.go
// gofmt 参数
usage: gofmt [flags] [path ...]
  -cpuprofile string
        write cpu profile to this file
  -d    display diffs instead of rewriting files
  -e    report all errors (not just the first 10 on different lines)
  -l    list files whose formatting differs from gofmt's
  -r string
        rewrite rule (e.g., 'a[b:len(a)] -> a[b:]')
  -s    simplify code
  -w    write result to (source) file instead of stdout
// go fmt 参数 
usage: go fmt [-n] [-x] [packages]

Fmt runs the command 'gofmt -l -w' on the packages named
by the import paths. It prints the names of the files that are modified.

For more about gofmt, see 'go doc cmd/gofmt'.
For more about specifying packages, see 'go help packages'.

The -n flag prints commands that would be executed.
The -x flag prints commands as they are executed.

To run gofmt with specific options, run gofmt itself.

See also: go fix, go vet.

包管理 go mod

命令说明
downloaddownload modules to local cache(下载依赖包)
editedit go.mod from tools or scripts(编辑go.mod)
graphprint module requirement graph (打印模块依赖图)
initinitialize new module in current directory(在当前目录初始化mod)
tidyadd missing and remove unused modules(拉取缺少的模块,移除不用的模块)
vendormake vendored copy of dependencies(将依赖复制到vendor下)
verifyverify dependencies have expected content (验证依赖是否正确)
whyexplain why packages or modules are needed(解释为什么需要依赖)
go help mod  
go mod init xx (初始化)
go mod tidy (自动检测依赖,并且写入go.mod文件)

go test

# 获取帮助
go help test

# 默认读取当前目录下所有名称为 *_test.go的文件,并执行测试
go test

# 获取详细输出信息
go test -v

# -run 指定函数名称 测试指定函数
go test ./ -v -run TestParsePattern

go list

# 查看帮助
go help list

# 没有参数默认显示当前路径代码包的导入路径
# The default output shows the package import path:
go list  (等同于 go list -f '{{.ImportPath}}')

# install path  安装目录
go list -f '{{.Target}}'

# -e 以容错模式加载和分析指定的代码包
go list -e -json .

go list参考这里

go clean

执行go clean命令会删除掉执行其它命令时产生的一些文件和目录,包括

  1. 在使用go build命令时在当前代码包下生成的与包名同名或者与Go源码文件同名的可执行文件
  2. 在执行go test命令并加入-c标记时在当前代码包下生成的以包名加".test"后缀为名的文件
  3. 如果执行go clean命令时带有标记-i,则会同时删除安装当前代码包时所产生的结果文件 (删除go install安装的文件)
  4. 还有一些目录和文件是在编译Go或C源码文件时留在相应目录中的
# 清除关联的安装的包和可运行文件
go clean -i 

# -n 把需要执行的清除命令打印出来,但是不执行,这样就可以很容易的知道底层是如何运行的
go clean -i -n

go clean参考这里


tim_xiao
144 声望2 粉丝

后端程序员