内容简介:go build: 用于编译指定的源码文件或者代码包以及它们的依赖包,默认不会编译目标代码包所依赖的那些代码包。当然如果依赖的代码包的归档文件不存在,后者源码文件有了变化,那它还是会被编译。go buildgo build 既不能编译包含多个命令源码文件的代码包,也不能同时编译多个命令源码文件。因为如果把多个命令源码文件作为一个整体看待,那么每个文件中的main函数都属于重名函数,在编译时会抛出重复定义错误。
go源码文件:
-
命令源码文件:总是作为可执行的程序的入口
-
库源码文件:一般用于集中放置各种待被使用的程序实体(全局常量、全局变量、接口、结构体、函数等等)
go build
go build: 用于编译指定的源码文件或者代码包以及它们的依赖包,默认不会编译目标代码包所依赖的那些代码包。当然如果依赖的代码包的归档文件不存在,后者源码文件有了变化,那它还是会被编译。
go build
-
在编译只包含库源码文件的代码包时,只会检查性的编译,不会输出任何结果文件
-
在编译命令源码文件时,生成可执行包
go build 既不能编译包含多个命令源码文件的代码包,也不能同时编译多个命令源码文件。因为如果把多个命令源码文件作为一个整体看待,那么每个文件中的main函数都属于重名函数,在编译时会抛出重复定义错误。
go build 常用标记:
- -a: 强行对所有设计到的代码包进行重新构建,不但目标代码包总会被编译,依赖的代码包也会被编译,即使依赖的是标准库中的代码包也是如此;
- -n: 打印编译期间所用到的其他命令,但是并不真正执行它们
- -p n: 制定编译过程中执行各任务的并行数量。
- -race: 开启竞态条件的检测。
- -v: 打印出那些被编译的代码包的名字
- -work: 打印出编译时生成的临时工作目录的路径,并在编译结束时保留。
- -x: 打印编译期间所用到的其他命令。可以看到具体执行了那些操作
go install
go install: 用于编译并安装指定的代码包及它们的依赖包。当指定的代码包的依赖包还没有被编译和安装时,该命令会先去处理依赖包。
go install 比 go build 多做一件事,安装编译后的结果文件到指定目录。
go install 安装代码包:
-
如果为库源码文件,会把编译后的结果文件保存在源码文件所在工作目录pkg下。对于仅包含库源码文件的代码包来说,这个结果文件就是对应的代码包归档文件,也叫静态链接库,以.a结尾
-
如果为命令源码文件,将生成的二进制文件放到当前目录或GOBIN目录下
go get
go get: 自动从主流公用代码仓库下载代码包,并把它们安装到环境变量GOPATH包含的第一个工作区的相应目录中,如果存在环境变量GOBIN,那么仅包含命令源码文件的代码包会被安装到GOBIN指向的那个目录
go get 标记:
- -d: 让命令只执行下载动作,而不执行安装动作
- -f: 仅在使用-u标记时才有效。该标记会让命令程序忽略对已下载代码包的导入路径的检查。
- -fix: 让命令程序在下载代码包之后执行修正动作,而后进行编译和安装
- -insecure: 允许通过非安全的网络协议下载和安装代码包。eg: http
- -t: 同时下载测试所需代码包
- -u: 下载并安装代码包,不论工作区中是否已存在它们。
go get突出特性智能下载;
- 在使用它检出或更新代码包之后,它会寻找与本地已安装 go 语言的版本相对应的标签或分支。如:本地安装Go语言版本1.x,那么go get命令会在该代码包的远程仓库中寻找名为“go1”的标签或者分支。如果找到,则将本地代码包的版本切换到此标签或者分支。如果没有找到,则将本地代码包的版本切换到主干的最新版本。
- go get通过git fetch将所有远程分支更新到本地,而后用git show-ref命令列出本地与远程仓库中记录的代码包的所有分支和标签。
- 最后,当确定没有名为"go1",go get使用git checkout origin/master命令将代码包版本切换到主干最新版本。
go clean
go clean: 删除掉执行其他命令时产生的一些文件和目录
包括:
-
使用go build 命令在当前包下生成的与包名同名或者与go源码文件同名的可执行文件
-
执行go test命令并加入-c标记时在当前代码包下生成的以包名为后缀的“.test”文件
-
如果执行go clean命令时带有-i,则会同时删除安装当前代码包时所产生的结果文件。如果当前代码包中只包含库源码文件,则结果文件指的就是在工作区的pkg目录的相应目录下的归档文件。如果当前代码包中只包含一个命令源码文件,则结果文件指的就是工作区的bin目录下的可执行文件。
-
还有一些目录和文件在编译Go或C源码文件时留在相应目录中的。
-
如果执行go clean命令时带有-r,则包括当前代码包的所有依赖包的上述目录和文件
go doc
go doc:可以打印赋与Go语言程序实体(程序实体:变量、常量、函数、结构体以及接口)的文档。
go doc 标识符:
- -c: 加入此标识符会使go doc命令区分参数重字母的大小写。
- -cmd: 加入此标识符,会使go doc命令同时打印出main包中的可导出的程序实体的文档。默认情况下,这部分文档不会被打印出来的
- -u: 加入此标记后,会是go doc命令同时打印出不可导出的程序实体的文档。默认情况下,这部分文档是不会被打印出来的
godoc
godoc: 一个很强大的工具,用于展示指定代码包的文档。
>> godoc fmt PACKAGE DOCUMENTATION package fmt import "fmt" Package fmt implements formatted I/O with functions analogous to C's printf and scanf. The format 'verbs' are derived from C's but are simpler. Printing The verbs: General: ........ >> godoc -src fmt // 查看文档和源码 >> godoc -http=:6060 // 启动端口6060的文档web服务器 复制代码
go run
go run 编译并运行命令源码文件。只接受一个go源码文件以及若干个库源码文件作为参数,且不接受代码包以及不能接受测试源码文件。也不允许多个命令源码文件作为参数,即使它们在同一个代码包中也是如此。在执行时会检查源码文件的类型。如果包含多个或者没有源码文件,那么go run命令只会打印错误提示信息并退出,而不会继续运行
通过检查之后,go run命令会将编译参数中的命令源码文件,并把编译后的可执行文件存放到临时目录中。
go run 命令标识符
-n: 打印相关命令而不实际执行。
go test
go test: 用于对go语言编写的程序进行测试。这种测试一代码包为单位。
go test 命令标记符:
- -c: 生成用于运行测试的可执行文件,但不执行它。
- -i: 安装/重新安装运行测试所需的依赖包,但不编译和运行测试代码
- -o: 执行用于运行测试的可执行文件。追加该标记不会影响测试代码的运行,除非同时追加标记 -c 或 -i
go list
go list: 列出指定的代码包的信息。
go list 标识符:
- -e: 以容错模式加载和分析指定的代码包。命令模式如果加载或分析过程中遇到错误指挥在内部记录一下,而不会直接把错误信息打印出来
- -json: 把代码包的结构体实力用json样式打印出来
>> go list -e net net >> go list -json net { "Dir": "/Users/wan/go/src/net", "ImportPath": "net", "Name": "net", "Doc": "Package net provides a portable interface for network I/O, including TCP/IP, UDP, domain name resolution, and Unix domain sockets.", "Target": "/Users/wan/go/pkg/darwin_amd64/net.a", "Root": "/Users/wan/go", "Match": [ "net" ], ...... }复制代码
go vet 和 go tool vet
vet: 代码静态检查发现可能的bug或可疑的构造;是go tool套件的一部分,和go编译器一起发布;在编译阶段和运行阶段发现bug;
go vet: 只在一个单独的包内可用,不能使用flag选项(来激活指定的检测)
go tool vet: 可用于文件和目录。目录递归遍历来找到包。
>> go vet file.go >> go tool vet dir/file or file.go复制代码
可通过 go tool vet --help
查询文档
以上所述就是小编给大家介绍的《golang 标准命令》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- C#/.NET 使用 CommandLineParser 来标准化地解析命令行
- node命令行工具之实现项目工程自动初始化的标准流程
- 中兴通讯助力DevOps标准发布,喜获标准工作组成员授牌
- CODING 受邀参与 DevOps 标准体系之系统和工具 & 技术运营标准技术专家研讨会
- 中国电子技术标准化研究院雷虎:以标准为依托,构建区块链测试生态
- 倚博科技成为 DevOps/AIOps 标准工作组成员,助力国家DevOps/AIOps标准体系建设与落地
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。