1.bug
: 在浏览器中打开github的golang项目,可以提交bug报告。
$ go bug
2.build
: 编译项目和文件
- 10种操作系统:
darwin,freebsd,linux,windows,android,dragonfly,netbsd,openbsd,plan9,solaris
- 9种处理器架构:
arm,arm64,386,amd64,ppc64,ppc64le,mips64,mips64le,s390x
# 交叉编译
$ CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -o demo.darwin.amd64
$ CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o demo.linux.amd64
3.clean
: 清理生成的可执行文件和包(不支持自定义的编译文件名)
-i 清除关联的安装的包和可运行文件,也就是通过go install安装的文件
-n 把需要执行的清除命令打印出来,但是不执行,这样就可以很容易的知道底层是如何运行的
-r 循环的清除在import中引入的包
-x 打印出来执行的详细命令,其实就是-n打印的执行版本
$ go clean -x #查看会执行什么命令
4.doc
: 查看包结构
或源码注释
。跟IDE中转到声明
等效
$ go doc 包名.成员名 #成员可以是常量、变量、结构体、函数、方法...
$ go doc builtin #查看内置包builtin的包结构
$ go doc http.Request #http包的Request结构体
$ go doc repo.GetOrderbyId #查看自定义成员信息
5.env
: 打印Go语言的环境信息
名称 | 说明 |
---|---|
CGO_ENABLED | 指明cgo工具是否可用的标识 |
GOARCH | 程序构建环境的目标计算架构 |
GOBIN | 存放可执行文件的目录的绝对路径 |
GOCHAR | 程序构建环境的目标计算架构的单字符标识 |
GOEXE | 可执行文件的后缀 |
GOHOSTARCH | 程序运行环境的目标计算架构 |
GOOS | 程序构建环境的目标操作系统 |
GOHOSTOS | 程序运行环境的目标操作系统 |
GOPATH | 工作区目录的绝对路径 |
GORACE | 用于数据竞争检测的相关选项 |
GOROOT | Go语言的安装目录的绝对路径 |
GOTOOLDIR | Go工具目录的绝对路径 |
6.fix
: 将指定代码包的旧代码修正为新代码。查看参考文章
7.fmt
: 格式化源码文件 查看参考文章
$ go fmt main.go
8.generate
: 扫描源码文件,找出"//go:generate"的特殊注释1,提取并执行该注释后面的命令。查看参考文章
有几点需要注意:
该特殊注释必须在.go源码文件中。
每个源码文件可以包含多个generate特殊注释时。
显示运行go generate命令时,才会执行特殊注释后面的命令。
命令串行执行的,如果出错,就终止后面的执行。
特殊注释必须以"//go:generate"开头,双斜线后面没有空格。
应用
在有些场景下,我们会使用go generate:
yacc:从 .y 文件生成 .go 文件。
protobufs:从 protocol buffer 定义文件(.proto)生成 .pb.go 文件。
Unicode:从 UnicodeData.txt 生成 Unicode 表。
HTML:将 HTML 文件嵌入到 go 源码 。
bindata:将形如 JPEG 这样的文件转成 go 代码中的字节数组。
再比如:
string方法:为类似枚举常量这样的类型生成String()方法。
宏:为既定的泛型包生成特定的实现,比如用于ints的sort.Ints。
9.get
:download and install packages and dependencies
-d 只下载不安装
-f 只有在你包含了-u参数的时候才有效,不让-u去验证import中的每一个都已经获取了,这对于本地fork的包特别有用
-fix 在获取源码之后先运行fix,然后再去做其他的事情
-t 同时也下载需要为运行测试所需要的包
-u 强制使用网络去更新包和它的依赖包
-v 显示执行的命令
$ go get github.com/garyburd/redigo/redis
10.install
: 编译安装
- 第一步:生成结果文件(可执行文件或者.a包)。
- 第二步:把编译好的结果移到 $GOPATH/pkg 或者 $GOPATH/bin。
11.list
: 查看包路径、名称、导入项、代码文件,测试文件,依赖项等信息。
$ go list -json net/http
12.mod
: 模块管理。查看参考文章
13.run
: 运行GO程序
-a:强制编译相关代码,无论是否编译过
-v:列出被编译的代码包的名称
-a -v:列出所有被编译的代码包的名称
-p n:并行编译,其中n为并行的数量 如-p 2
-n:打印编译过程中所需运行的命令,但并不执行这些命令
-x:打印编译过程中所需运行的命令,并执行这些命令
-work:显示编译时创建的临时工作目录的路径,并且不删除这个临时工作目录
# -n 显示执行过程;-p:
$ go run showds.go -p ~/golang/goc2p
14.test
: 单元测试
-bench regexp 执行相应的benchmarks,例如 -bench=.
-cover 开启测试覆盖率
-run regexp 只运行regexp匹配的函数,例如 -run=Array 那么就执行包含有Array开头的函数
-v 显示测试的详细命令
$ go test demo_test.go demo.go # 单元测试
$ go test --cover demo_test.go demo.go # 单元测试覆盖率
$ go test -bench=. demo_test.go demo.go # 性能测试
15.tool
: 运行指定的go工具, 如:go tool pprof
16.version
: 打印golang版本信息
17.vet
: 用于检查静态错误,即编译不易发现等错误。查看参考文章
$ go tool vet <directory|files>
func main() {
// 1.可疑代码
var i = 0
fmt.Println(i != 0 || i != 1)
fmt.Println(i == 0 && i == 1)
2.格式化参数错误
fmt.Printf("%d\n", "hello")
// 3.除零错误
fmt.Println(2 / 0)
// 4. 读不到的代码
goto OVER
fmt.Println("hello")
OVER:
// 5.竞态代码
words := []string{"foo", "bar", "baz"}
for _, word := range words {
go func() {
fmt.Println(word)
}()
}
}
18.godoc
: 用于展示指定代码包的文档
$ godoc fmt
$ godoc fmt Printf
$ godoc fmt Printf Println
$ godoc -src fmt Printf
$ godoc cmd/go
$ godoc -http=:9999 #启动$GOROOT\doc下的帮助站点
19.help
: 帮助命令
$ go help modules
$ go help vet
参考:
https://github.com/hyper0x/go_command_tutorial
Go的注解只是特殊的注释约定,如
Deprecated
表示代码已不被推荐使用;TODO
可以快速定位到代办项; ↩︎