[转帖]go 命令
golang笔记——命令
1、GO命令一览
GO提供了很多命令,包括打包、格式化代码、文档生成、下载第三方包等等诸多功能,我们可以通过在控制台下执行 go 来查看内置的所有命令

下面来逐个介绍,也可以详细参考 https://github.com/hyper-carrot/go_command_tutorial
2、go build
这个命令可以直接使用,也可以带上代码包或源码文件使用。
如果是直接使用,表示试图编译当前目录所对应的代码包,如果当前目录不是一个有效的代码包(包含在 $GOPATH/src 目录下)则会报错;如果带上代码包名,则表示编译指定的代码包;如果带上源码文件,则表示编译指定源码文件。
GO语言的源码文件分为三类,包括命令源码文件、库源码 文件和测试源码文件。如果编译的是命令源码文件,或包含命令源码文件的包(main包)时,编译通过后会生成可执行文件;反之则不会生成任何文件,只是做检查性编译。
可以在执行 go build 命令时,加上一些标记,如:
-v 标记,可以把命令执行过程中构建的包名(包含编译过程中依赖的包)打印出来,如果 go build 的是一个源码文件,则会打印出的包名为 command-line-arguments,这是编译源码文件时生成的虚拟包名,所以看到不用觉得奇怪。
-x 标记,可以打印编译期间所用到的所有 shell 命令。
-o 标记,用来指定生成文件的路径和名称。
-a 标记,强制重新编译。
-buildmode=shared 标记,这个参数可以指定当前编译生成的结果类型,如静态库和动态库。GO语言默认使用静态编译,好处是部署时非常简单,但使用动态库,可以减少分发包的大小,大家可以根据实际情况选择。注意,目前在windows下尚不支持编译成动态库。
更多参数,请使用 go build -h 或 go help build 查看。
3、go install
这个命令用于编译安装,可以作用于 main 包和非 main 包,然后将编译后的生成的执行文件存放到工程的 bin 目录下,将生成的归档文件(即静态链接库)存放到工程的 pkg 目录下。使用方式类似于 go build,可以在某个代码包目录下直接使用,也可以指定代码包使用。
4、go run
编译并执行,只能作用于命令源码文件,一般用于开发中快速测试。
5、go clean
该命令可以删除执行其它命令时产生的文件和目录,但我没有找到删除 pkg 目录下的归档文件的选项。
6、go test
进行单元测试的工具,单元测试代码建议与被测试代码放在同一个代码包中,并以 "_test.go" 为后期,测试函数建议以 "Test" 为名称前缀。该命令可以对代码包进行测试,也可以指定某个测试代码文件运行(要一并带上被测试代码文件)
7、go get
下载第三方代码包并编译安装 ,需要注意的是,它会下载安装到 GOPATH 环境变量配置的第一个工作区中。
另外,我发现,如果某一个工作区中(不必是GOPATH 环境变量配置的第一个工作区中)已经存在该代码包,则不会重新下载。
此外,我们还可以自己搭建代码托管网站,有兴趣可以参考:https://github.com/hyper-carrot/go_command_tutorial/blob/master/0.3.md
8、go doc
文档注释相关,可以搭建本地GO文档服务器,包含自己的项目注释,更多细节请参考:https://github.com/hyper-carrot/go_command_tutorial/blob/master/0.5.md
9、go list
不加任何标记直接使用,是显示指定包的导入路径,如 go list net/http 就显示 net/http。
该命令加上 -json 标记可以显示完整信息,如:

如果只想显示指定信息,可以使用 -f 标记,如 go list -f {{.GoFiles}} net/http 可以显示 net/http 包中的 GO 源码文件列表。(所以可以理解,默认的 go list 相当于 go list -f {{.ImportPath}})

10、go fmt
作用于代码包,用于格式化代码包中的代码格式,注意不包含代码包中的子代码包。是 gofmt 的简单封装,相当于 gofmt -l -w ,更多信息,请通过 gofmt -h 查看。
11、go fix
简单的说,这是一个当GO语言版本升级之后,把代码包中旧的语法更新成新版本语法的自动化工具。它是 go tool fix 的简单封装,它作用于代码包。当需要升级自己的项目或者升级下载的第三方代码包,可以使用此方法。(下载并升级代码包可以使用 go get -fix 命令 )
12、go vet
静态检查工具,这是个好东西,一般项目快完成时进行进行优化时需要,到时候再详细研究。
13、go tool pprof
性能检查工具,等需要时再详细研究。详见:https://github.com/hyper-carrot/go_command_tutorial/blob/master/0.12.md
14、go tool cgo
从 cgo的名字可以猜出,这是一个跟C语言和GO语言有关的命令,需要时再进行研究。
15、go env
用于打印GO语言的环境信息,如 GOPATH 是工作区目录,GOROOT 是GO语言安装目录,GOBIN 是通过 go install 命令生成可执行文件的存放目录(默认是当前工作区的 bin 目录下),GOEXE 为生成可执行文件的后缀
16、转成汇编代码
go tool objdump -s "operate\.Login" server
上面的意思是,解析可执行文件server,将其中的 operate 包的 Login 方法转成汇编代码。
[转帖]go 命令的更多相关文章
- [转帖]xargs命令详解,xargs与管道的区别
xargs命令详解,xargs与管道的区别 https://www.cnblogs.com/wangqiguo/p/6464234.html 之前一直说要学习一下 xargs 到现在为止也没学习.. ...
- [转帖]ipvsadm命令参考及其应用例子
ipvsadm命令参考及其应用例子 https://blog.csdn.net/orichisonic/article/details/47375227 只是简单创建了 service和添加serve ...
- [转帖]Linux命令中特殊符号
Linux命令中特殊符号 转自:http://blog.chinaunix.net/uid-16946891-id-5088144.html 在shell中常用的特殊符号罗列如下:# ; ;; . ...
- [转帖]dd命令详解
dd命令详解 https://czmmiao.iteye.com/blog/1748748 之前一直对linux的命令很恐惧 现在发现 其实不是那么复杂 要仔细学习就可以了 比如 dd = disk ...
- [转帖]git命令参考手册
git init # 初始化本地git仓库(创建新仓库) git ...
- [转帖] dd 命令图解
dd命令-->dd是disk dump的缩写,指定大小的块拷贝一个文件,同时进行指定的转换,起到一个初始化磁盘的作用 https://blog.csdn.net/jerry_1126/arti ...
- [转帖]pidstat 命令详解
pidstat 命令详解 https://www.jianshu.com/p/3991c0dba094 pidstat -r -u -d -p 各种参数非常好用. pidstat 概述 pidstat ...
- [转帖]ps 命令详解
ps 命令详解 https://www.jianshu.com/p/cba22cce2f97 ps 概述 Linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的那 ...
- [转帖]iostat 命令详解
iostat 命令详解 https://www.jianshu.com/p/5fed8be1b6e8 概述 iostat 主要用于输出磁盘IO 和 CPU的统计信息. iostat属于sysstat软 ...
随机推荐
- 11 [异常]-try...except
1.什么是异常 异常就是程序运行时发生错误的信号(在程序出现错误时,则会产生一个异常,若程序没有处理它,则会抛出该异常,程序的运行也随之终止),在python中,错误触发的异常如下 2.错误 错误分成 ...
- 11- IO模型-未完成
1.同步.异步.阻塞.非阻塞 同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么 ...
- JDBC连接数据库及其执行操作
作者:Alvin 功能:数据库连接与实现增删改查 时间:2019年3月4日08点33分 参考文章:https://www.2cto.com/database/201805/743741.html 一. ...
- 开源项目CIIP(企业信息管理系统框架).2018.1.0910版更新介绍-上周工作总结
又狂撸了一周的代码.简化了0904版本的多数操作. 上一次更新时,总共需要10步,这次简化成3步.嗯嗯,自我感觉不错. 重要的:在创建项目时,可以选择常用模块啦! 第一步:启动CIIP.Designe ...
- Java 中的接口
接口概念 接口可以理解为一种特殊的类,由全局常量和公共抽象方法组成.类是一种具体实现体,而接口定义了某一些类所要遵守的规范,接口不必关心这些类的内部数据,也不关心这些类里方法的实现细节,它只规定这些类 ...
- 执行shell脚本时提示bad interpreter:No such file or directory的解决办法
执行shell脚本时提示bad interpreter:No such file or directory的解决办法 故障现象:在终端直接cd /var正常,在shell脚本中执行则报错.原因是脚本是 ...
- Memached、Redis、Mongodb的区别
性能 • 性能都很高,redis和memached差不多 > Mongodb 操作 • Memached:数据结构单一,只有key/value数据结构 • Redis有五种数据类型 ...
- navicat连接mysql出现1251错误
刚刚安装热乎的navicat发现出现1251错误,原因不大清楚,找到一个解决办法: 将mysql的密码重新重置一遍: 1.打开命令行 ,进入mysql所在的目录,输入 mysql -uroot -p ...
- Centos 7 安装Zabbix
一.环境准备与说明: 1.zabbix server 版本:3.4.12 ,https://www.zabbix.com/download 2.zabbix agent版本:3.4.14,https: ...
- 笔试题——C++开发简单记录错误模块
题目:链接:https://www.nowcoder.com/questionTerminal/67df1d7889cf4c529576383c2e647c48 来源:牛客网 解析及代码来源:http ...