1. go get与go install

可能有同学在刚使用go get的时候会有一个小疑问,就是有些包go get下来的时候,有些包会“下载”一个二进制包在GOPATH/bin目录下,有些又没有。其实这是因为go get这个命令会分两步走,一个是下载源码包,一个是执行go install。所以有些包里面有main包的时候,下载完源码包就可以被go install编译放在GOPATH/bin目录下。来看个小例子。

关于go get的小知识_第1张图片

起先,我的GOPATH/bin目录下没有something.exe,在执行"go get -v -u github.com/TomatoMr/something"之后,$GOPATH/bin目录就有something.exe了。

2. go get与go mod

再来看看go get与go mod的关系。这两者其实没有什么关系,一般来讲,在项目下面有了go.mod文件,执行了"go mod tidy",源码包并不是下载在GOPATH/src下面了,而是下载在GOPATH/pkg下,这跟go get不一样,"go mod tidy"也不会执行"go install"。
但是,如果你的项目用了go mod, 并且你是在你的项目下面执行"go get"的话,可能会遇到"missing dot in first path element"的报错,所以,用了go mod的话,尽量就少用go get,当然要看具体情况,如果你需要下载的时候也安装,就用go get。

3. go get常用参数

-v 显示操作流程的日志及信息,方便检查错误
-u 下载丢失的包,但不会更新已经存在的包
-d 只下载,不安装
-insecure 允许使用不安全的 HTTP 方式进行下载操作