前言
这篇文章可能会有些偏见。这篇文章描述了个人会用到的Go工具参数,还有一些是我周围的人遇到的问题。如果有问题大家可以留言,你是刚开始使用Go工具么?或者你想扩展知识?这篇文章将会描述每个人都需要知道的Go工具参数。下面话不多说了,来一看看详细的介绍吧。
$ go build -x
-x会列出来go build
调用到的所有命令。
如果你对Go的工具链好奇,或者使用了一个跨C编译器,并且想知道调用外部编译器用到的具体参数,或者怀疑链接器有bug;使用-x来查看所有调用。
$ go build -x WORK=/var/folders/00/1b8h8000h01000cxqpysvccm005d21/T/go-build600909754 mkdir -p $WORK/hello/perf/_obj/ mkdir -p $WORK/hello/perf/_obj/exe/ cd /Users/jbd/src/hello/perf /Users/jbd/go/pkg/tool/darwin_amd64/compile -o $WORK/hello/perf.a -trimpath $WORK -p main -complete -buildid bbf8e880e7dd4114f42a7f57717f9ea5cc1dd18d -D _/Users/jbd/src/hello/perf -I $WORK -pack ./perf.go cd . /Users/jbd/go/pkg/tool/darwin_amd64/link -o $WORK/hello/perf/_obj/exe/a.out -L $WORK -extld=clang -buildmode=exe -buildid=bbf8e880e7dd4114f42a7f57717f9ea5cc1dd18d $WORK/hello/perf.a mv $WORK/hello/perf/_obj/exe/a.out perf $ go build -gcflags
这个参数将会传递给编译器。go tool compile -help
列出来了所有我们可以传递给编译器的参数。
例如,禁用编译器优化和内联优化,你可以使用下面的参数:
$ go build -gcflags="-N -I"
$ go test -v
这个命令可以为测试提供完整的输出。它会打印测试名称、状态(成功或者失败)、测试所耗费的时间,还有测试的日志等等。
如果不使用-v参数来测试,输出很少很多,我经常使用-v参数来打开详细测试日志。例子:
$ go test -v context === RUN TestBackground --- PASS: TestBackground (0.00s) === RUN TestTODO --- PASS: TestTODO (0.00s) === RUN TestWithCancel --- PASS: TestWithCancel (0.10s) === RUN TestParentFinishesChild --- PASS: TestParentFinishesChild (0.00s) === RUN TestChildFinishesFirst --- PASS: TestChildFinishesFirst (0.00s) === RUN TestDeadline --- PASS: TestDeadline (0.16s) === RUN TestTimeout --- PASS: TestTimeout (0.16s) === RUN TestCanceledTimeout --- PASS: TestCanceledTimeout (0.10s) ... PASS ok context 2.426s
$ go test -race
现在可以使用Go工具提供的-race参数进行竞争检测。它会检测并报告竞争。开发的过程中用这个命令来检测一下。
注:完整的命令是:
$ go test -race mypkg // to test the package $ go run -race mysrc.go // to run the source file $ go build -race mycmd // to build the command
$ go test -run
你可以在测试的时候通过-run参数来正则匹配过滤需要测试的代码。下面的命令只会运行test examples。
$ go test -run=Example
$ go test -coverprofile
当测试一个包的时候,可以输出一个测试覆盖率,然后使用命令go tool来在浏览器里面可视化。
$ go test -coverprofile=c.out && go tool cover -html=c.out
注:测试fmt包
go test -coverprofile=c.out fmt
$ go test -exec
一般很少有人知道Go的这个功能,你可以通过-exec插入另一个程序。这个参数允许通过Go工具完成一些外部工作。
一个常见的需求场景是你需要在一些宿主机上面执行一些测试。我们可以通过-exec命令调用adb命令来把二进制文件导入安卓设备并且可以收集到结果信息。参考这个来在安卓设备上面执行。
$ go get -u
如果你通过go get命令获取Go包,而这个包已经存在于本地的GOPATH,那么这个命令并不会帮你更新包。-u可以强制更新到最新版。
如果你是一个库作者,你最好在你的安装说明上加上-u参数,例如,golint是这么做的:
$ go get -u github.com/golang/lint/golint
$ go get -d
如果你想clone一个代码仓库到GOPATH里面,跳过编译和安装环节,使用-d参数。这样它只会下载包并且在编译和安装之前停止。
当需要clone虚拟网址代码仓库的时候,我经常使用这个命令来代替git clone,因为这样可以把Go代码自动放入合适的目录下面。例如:
$ go get -d golang.org/x/oauth2/...
这样可以克隆到$GOPATH/src/golang.org/x/ouath2目录下面。假设golang.org/x/oauth2是一个虚拟网址,通过go get获取这个代码仓库要比找出仓库的真实地址(go.googlesource.com/oauth2)更简单。
$ go get -t
如果你的测试包的有附加的依赖包,-t可以一并下载测试包的依赖包。如果没有加这个参数,go get只会下载非测试包的依赖包。
$ go list -f
这个命令可以列出来Go的所有包,并且可以指定格式。这个写脚本的时候很有用。
下面这个命令将会打印所有依赖的runtime包
go list -f ‘' runtime [runtime/internal/atomic runtime/internal/sys unsafe]
参考链接:
http://blog.csdn.net/erlib/article/details/52703165
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。