深度思维者

永远年轻,永远热泪盈眶

golang基础-工作区和gopath

go build 命令一些可选项的用途和用法

  1. 在运行go build命令的时候,默认不会编译目标代码包所依赖的那些代码包。当然,如果被依赖的代码包的归档文件不存在,或者源码文件有了变化,那它还是会被编译。
  2. 如果要强制编译它们,可以在执行命令的时候加入标记 -a。此时,不但目标代码包总是会被编译,它依赖的代码包也总会被编译,即使依赖的是标准库中的代码包也是如此。
  3. 另外,如果不但要编译依赖的代码包,还要安装它们的归档文件,那么可以加入标记 -i

怎么确定哪些代码包被编译了呢?有两种方法


  1. 运行go build命令时加入标记-x,这样可以看到go build命令具体都执行了哪些操作。另外也可以加入标记-n,这样可以只查看具体操作而不执行它们。
  2. 运行go build命令时加入标记-v,这样可以看到go build命令编译的代码包的名称。它在与-a标记搭配使用时很有用。

go get指令说明

  1. 命令 go get会自动从一些主流公用代码仓库(比如 GitHub)下载目标代码包,并把它们安装到环境变量GOPATH包含的第 1 工作区的相应目录中。如果存在环境变量GOBIN,那么仅包含命令

    源码文件的代码包会被安装到GOBIN指向的那个目录。

  2. 最常用的几个标记有下面几种:

    • -u:下载并安装代码包,不论工作区中是否已存在它们。
    • -d:只下载代码包,不安装代码包。
    • -fix:在下载代码包后先运行一个用于根据当前 Go 语言版本修正代码的工具,然后再安装代码包。
    • -t:同时下载测试所需的代码包。
    • -insecure:允许通过非安全的网络协议下载和安装代码包。HTTP 就是这样的协议

Go 语言官方提供的go get命令是比较基础的,其中并没有提供依赖管理的功能。目前 GitHub 上有很多提供这类功能的第三方工具,比如glidegb以及官方出品的depvgo等等,它们在内部大都会直接使用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 这个域名背后的服务端程序上,添加一些支持才能使这条命令成功。

** 关于自定义代码包导入路径的完整说明可以参看 自定义代码包导入说明

posted @ 2024-08-08 15:58  failymao  阅读(15)  评论(0编辑  收藏  举报