[Go] Golang 标准命令
Contents
Golang 标准命令
go build
- 在编译只包含库源码文件的代码包时,只会检查性的编译,不会输出任何结果文件
- 在编译命令源码文件时,生成可执行包
- go build会忽略目录下以“_”或“.”开头的go文件
- go build的时候会选择性地编译以系统名结尾的文件(Linux、Darwin、Windows、Freebsd)
常用参数详解:
- -o 指定输出的文件名,可以带上路径,例如 go build -o a/b/c
- -i 安装相应的包,编译+go install
- -a 更新全部已经是最新的包的,但是对标准包不适用
- -n 把需要执行的编译命令打印出来,但是不执行,这样就可以很容易的知道底层是如何运行的
- -p n 指定可以并行可运行的编译数目,默认是CPU数目
- -race 开启编译的时候自动检测数据竞争的情况,目前只支持64位的机器
- -v 打印出来我们正在编译的包名
- -work 打印出来编译时候的临时文件夹名称,并且如果已经存在的话就不要删除
- -x 打印出来执行的命令,其实就是和-n的结果类似,只是这个会执行
- -ccflags ‘arg list’ 传递参数给5c, 6c, 8c 调用
- -compiler name 指定相应的编译器,gccgo还是gc
- -gccgoflags ‘arg list’ 传递参数给gccgo编译连接调用
- -gcflags ‘arg list’ 传递参数给5g, 6g, 8g 调用
- -installsuffix suffix 为了和默认的安装包区别开来,采用这个前缀来重新安装那些依赖的包,-race的时候默认已经是-installsuffix race,大家可以通过-n命令来验证
- -ldflags ‘flag list’ 传递参数给5l, 6l, 8l 调用
- -tags ‘tag list’ 设置在编译的时候可以适配的那些tag,详细的tag限制参考里面的 Build Constraints
go install
go install 比 go build 多做一件事,安装编译后的结果文件到指定目录。
- 如果为库源码文件,会把编译后的结果文件保存在源码文件所在工作目录pkg下。 对于仅包含库源码文件的代码包来说,这个结果文件就是对应的代码包归档文件,也叫静态链接库,以.a结尾如果为命令源码文件,
- 将生成的二进制文件放到当前目录或GOBIN目录下
go get
用来动态获取远程代码包
常用参数详解:
- -d 只下载不安装
- -f 只有在你包含了-u参数的时候才有效,不让-u去验证import中的每一个都已经获取了,这对于本地fork的包特别有用
- -fix 让命令程序在下载代码包之后执行修正动作,而后进行编译和安装
- -t 同时下载测试所需代码包
- -u 强制使用网络去更新包和它的依赖包, 安装代码包,不论工作区中是否已存在它们
- -v 显示执行的命令
- -insecure 允许通过非安全的网络协议下载和安装代码包。eg: http
go clean
用来移除当前源码包和关联源码包里面编译生成的文件
包括文件:
_obj/ 旧的object目录,由Makefiles遗留
_test/ 旧的test目录,由Makefiles遗留
_testmain.go 旧的gotest文件,由Makefiles遗留
test.out 旧的test记录,由Makefiles遗留
build.out 旧的test记录,由Makefiles遗留
*.[568ao] object文件,由Makefiles遗留
DIR(.exe) 由go build产生
DIR.test(.exe) 由go test -c产生
MAINFILE(.exe) 由go build MAINFILE.go产生
*.so 由 SWIG 产生
常用参数详解:
- -i 清除关联的安装的包和可运行文件,也就是通过go install安装的文件
- -n 把需要执行的清除命令打印出来,但是不执行,这样就可以很容易的知道底层是如何运行的
- -r 循环的清除在import中引入的包
- -x 打印出来执行的详细命令,其实就是-n打印的执行版本
go fmt
go fmt是gofmt
https://golang.org/cmd/gofmt/的上层一个包装的代码格式化命令工具
gofmt -w -l src
可以格式化整个项目
常用参数详解:
- -l 显示那些需要格式化的文件
- -w 把改写后的内容直接写入到文件中,而不是作为结果打印到标准输出。
- -r 添加形如“a[b:len(a)] -> a[b:]”的重写规则,方便我们做批量替换
- -s 简化文件中的代码
- -d 显示格式化前后的diff而不是写入文件,默认是false
- -e 打印所有的语法错误到标准输出。如果不使用此标记,则只会打印不同行的前10个错误。
- -cpuprofile 支持调试模式,写入相应的cpufile到指定的文件
go run
go run命令会将编译参数中的命令源码文件,并把编译后的可执行文件存放到临时目录中
常用参数详解:
- -n: 打印相关命令而不实际执行
go list
go list 列出指定的代码包的信息
常用参数详解:
- -e 以容错模式加载和分析指定的代码包。命令模式如果加载或分析过程中遇到错误指挥在内部记录一下,而不会直接把错误信息打印出来
- -json 把代码包的结构体实力用json样式打印出来
go test
go test 会自动读取源码目录下的*_test.go文件, 生成并运行测试用的可执行文件
常用参数详解:
- -bench regexp 执行相应的benchmarks,例如 -bench=.
- -cover 开启测试覆盖率
- -run regexp 只运行regexp匹配的函数,例如 -run=Array 那么就执行包含有Array开头的函数
- -v 显示测试的详细命令
- -c 生成用于运行测试的可执行文件,但不执行它。
- -i 安装/重新安装运行测试所需的依赖包,但不编译和运行测试代码
- -o 执行用于运行测试的可执行文件。追加该标记不会影响测试代码的运行,除非同时追加标记 -c 或 -i
go tool
go 工具包
- go tool fix . 用来修复以前老版本的代码到新版本
- go tool vet directory|files 用来分析当前目录的代码是否都是正确的代码
- go tool vet –help 查看帮助
- go tool pprof
- go tool cgo
- go tool 查看其它命令
- go vet 只在一个单独的包内可用,不能使用flag选项(来激活指定的检测)
- go tool vet 可用于文件和目录。目录递归遍历来找到包。
go doc
查看相应package的文档
go get golang.org/x/tools/cmd/godoc
安装godoc
godoc -http=:8080
浏览器中查看http://127.0.0.1:8080
godoc net/http
查看一个包
godoc fmt Printf
查看包中的一个函数
godoc -src fmt Printf
查看包中函数代码
go generate
通过分析源码中特殊的注释,然后执行相应的命令
例如使用yacc来生成代码
go tool yacc -o gopher.go -p parser gopher.y
-o 输出的文件名 -p package名称
可以在当然目录的任意一个xxx.go文件里面的任意位置增加一行如下的注释:
//go:generate go tool yacc -o gopher.go -p parser gopher.y
注意: //go:generate 是没有空格的, 这样就可以用go generate
来触发这个命令
go get golang.org/x/tools/cmd/goyacc
安装goyacc