go build 命令一些可选项的用途和用法
- 在运行go build命令的时候,默认不会编译目标代码包所依赖的那些代码包。当然,如果被依赖的代码包的归档文件不存在,或者源码文件有了变化,那它还是会被编译。
- 如果要强制编译它们,可以在执行命令的时候加入标记
-a
。此时,不但目标代码包总是会被编译,它依赖的代码包也总会被编译,即使依赖的是标准库中的代码包也是如此。 - 另外,如果不但要编译依赖的代码包,还要安装它们的归档文件,那么可以加入标记
-i
怎么确定哪些代码包被编译了呢?有两种方法
- 运行
go build
命令时加入标记-x
,这样可以看到go build
命令具体都执行了哪些操作。另外也可以加入标记-n
,这样可以只查看具体操作而不执行它们。 - 运行
go build
命令时加入标记-v
,这样可以看到go build
命令编译的代码包的名称。它在与-a
标记搭配使用时很有用。
go get指令说明
-
命令
go get
会自动从一些主流公用代码仓库(比如 GitHub)下载目标代码包,并把它们安装到环境变量GOPATH
包含的第 1 工作区的相应目录中。如果存在环境变量GOBIN
,那么仅包含命令源码文件的代码包会被安装到GOBIN指向的那个目录。
-
最常用的几个标记有下面几种:
- -u:下载并安装代码包,不论工作区中是否已存在它们。
- -d:只下载代码包,不安装代码包。
- -fix:在下载代码包后先运行一个用于根据当前 Go 语言版本修正代码的工具,然后再安装代码包。
- -t:同时下载测试所需的代码包。
- -insecure:允许通过非安全的网络协议下载和安装代码包。HTTP 就是这样的协议
Go 语言官方提供的go get命令是比较基础的,其中并没有提供依赖管理的功能。目前 GitHub 上有很多提供这类功能的第三方工具,比如glide
、gb
以及官方出品的dep
、vgo
等等,它们在内部大都会直接使用go get。
如何变更存储源码的代码仓库或者代码包的相对路径
为了让代码包的远程导入路径不受此类变更的影响,我们会使用自定义的代码包导入路径
对代码包的远程导入路径进行自定义的方法是:在该代码包中的库源码文件的包声明语句的右边加入导入注释,像这样:
package semaphore // import "golang.org/x/sync/semaphore"
这个代码包原本的完整导入路径是 github.com/golang/sync/semaphore
这与实际存储它的网络地址对应的。该代码包的源码实际存在 GitHub 网站的 golang 组的 sync 代码仓库的 semaphore 目录下。
而加入导入注释之后,用以下命令即可下载并安装该代码包了:
go get golang.org/x/sync/semaphore
而 Go 语言官网 golang.org 下的路径 /x/sync/semaphore
并不是存放semaphore
包的真实地址。我们称之为代码包的自定义导入路径。
不过,这还需要在 golang.org 这个域名背后的服务端程序上,添加一些支持才能使这条命令成功。
** 关于自定义代码包导入路径的完整说明可以参看 自定义代码包导入说明。
标签:gopath,代码,基础,golang,编译,导入,semaphore,go From: https://www.cnblogs.com/failymao/p/18349106