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 学习 ---golang命令的更多相关文章
- 前端程序员学习 Golang gin 框架实战笔记之一开始玩 gin
原文链接 我是一名五六年经验的前端程序员,现在准备学习一下 Golang 的后端框架 gin. 以下是我的学习实战经验,记录下来,供大家参考. https://github.com/gin-gonic ...
- 学习vim命令:“:w !sudo tee %”
学习vim命令:“:w !sudo tee %” Original URL:http://www.haw-haw.org/node/1501 原文来自于commandlinefu 原文是这样解释这个命 ...
- 每日linux命令学习-head命令和tail命令
本节主要学习了linux文件浏览的相关命令,包括cat.less.more.read.tail等,由于本人经常使用cat.less.more命令,已经较为熟悉,所以本节重点学习head命令和tail命 ...
- 深入学习Make命令和Makefile(上)
https://www.zybuluo.com/lishuhuakai/note/209302 深入学习Make命令和Makefile(上) make是Linux下的一款程序自动维护工具,配合make ...
- [转]git学习------>git-rev-parse命令初识
git学习------>git-rev-parse命令初识 2017年06月13日 10:04:13 阅读数:2172 一.准备工作 第一步:在d盘git test目录下,新建工作区根目录dem ...
- GO学习笔记 - 命令行解析
本文主题:基于os.Args与flag实现Golang命令行解析. 小慢哥的原创文章,欢迎转载 目录 ▪ 一. os.Args ▪ 二. flag ▪ 三. 结合os.Args与flag实现子命令 ▪ ...
- 学习Golang语言(6):类型--切片
学习Golang语言(1): Hello World 学习Golang语言(2): 变量 学习Golang语言(3):类型--布尔型和数值类型 学习Golang语言(4):类型--字符串 学习Gola ...
- 学习linux命令,看这篇2w多字的linux命令详解
用心分享,共同成长 没有什么比每天进步一点点更重要了 本文已收录到我的github:https://github.com/midou-tech/articles/tree/master/docs/li ...
- 学习 Vim 命令总结
学习 Vim 命令总结 可以使用 vscode-vim 扩展,但是要注意一些ctrl+字母的快捷键会无效,必须去掉冲突的快捷键 esc 回到普通模式 i 普通模式进入插入模式 : 进入命令模式 :wa ...
随机推荐
- js移除Array中指定元素
首先需要找到元素的下标: var array = [2, 5, 9]; var index = array.indexOf(5); 使用splice函数进行移除: if (index > -1) ...
- 交叉编译git
git依赖openssl.zlib. 首先编译openssl ./Configure linux-armv4 shared 修改Makefile,CC.RANLIB.MAKEDEPPROG为对应的交叉 ...
- json字符串和dict互转
json字符串和dict互转 import json str = '{"params":[{"id":222,"offset":0},{&q ...
- @SuppressLint("NewApi")和@TargetApi()的区别
在Android代码中,我们有时会使用比我们在AndroidManifest中设置的android:minSdkVersion版本更高的方法,此时编译器会提示警告, 解决方法是在方法上加上@Suppr ...
- VS2010已停止工作,framework 4.0安装失败
好久没在台式机上写程序了,今天打开一个解决方案,报错: 从来没有遇到这种情况,重新关闭解决方案,在菜单栏中打开解决方案说没有framework 4.0,其实我安装的是4.5 ,也有4.0,于是全部卸载 ...
- Struts2远程代码执行漏洞预警
近期struts2 框架再现高危远程命令执行漏洞,漏洞编号S2-045,CVE编号CVE-2017-5638.利用此漏洞可对使用了struts2框架的网站进行远程命令执行,对服务器造成威胁.请相关单位 ...
- iOS中ActionSheet和Alert的区别
首先,样子长得就不一样 看下图:
- error: Microsoft Visual C++ 9.0 is required. Get it from http://aka.ms/vcpython27
G:\Soft\python\word_cloud-master>python setup.py install error: Microsoft Visual C++ 9.0 is requi ...
- Camera 预览变形问题解决
最近开发一款自定义相机采集照片的demo,花了一个上午开发了一个在测试机上功能正常的apk连同测试机一起交付(需求方反馈没有Android设备),然而晚上被喊去说是在华为畅玩某型号上预览会变形,拍到的 ...
- 2019年所有人必须要掌握的一个技能 - “AI思维”
或许很多人认为AI只是那些直接从事AI相关岗位的人必须要掌握的技能,但实际上,不分岗位所有人都需要一种能力,那就是“AI思维”.如果没能在合适的时机把自己的认知提升到一定程度,被替代是很自然的事情.在 ...