设为首页 加入收藏

TOP

Go Modules使用教程(三)
2019-09-18 11:10:40 】 浏览:139
Tags:Modules 使用 教程

每个 subcommand 的含义如下:

  • download: 下载 modules 到本地缓存

  • edit: 提供一种命令行交互修改 go.mod 的方式

  • graph: 将 module 的依赖图在命令行打印出来,其实并不是很直观

  • init: 初始化 modules,会生成一个 go.mod 文件

  • tidy: 清理 go.mod 中的依赖,会添加缺失的依赖,同时移除没有用到的依赖

  • vendor: 将依赖包打包拷贝到项目的 vendor 目录下,值得注意的是并不会将 test code 中的依赖包打包到 vendor 中。这种设计在社区也引起过几次争论,但是并没有达成一致。

  • verify: verify 用来检测依赖包自下载之后是否被改动过。

  • why: 解释为什么 package 或者 module 是需要,但是看上去解释的理由并不是非常的直观。

? mod-demo $ gomod why github.com/astaxie/beego# github.com/astaxie/beegomod-demogithub.com/astaxie/beego

 

3. Go 1.13 对 modules 的改动


上面在讨论 GoProxy 的时候提到了 Go 1.13 默认设置环境变量 GOPROXY 的值,除此之外 Go 1.13 对 modules 还有哪些值得注意的改动呢?

3.1 默认开启

modules 在 Go 1.13 的版本下是默认开启的。

3.2 GOPRIVATE

前面也说到对于一些内部的 package,GoProxy 并不能很好的处理,Go 1.13 推出了 GOPRIVATE 机制。只需要设置这个环境变量,然后标识出哪些 package 是 private 的,那么对于这个 package 的处理将不会从 proxy 下载。GOPRIVATE 的值是一个以逗号分隔的列表,支持正则(正则语法遵守 Golang 的 包 path.Match)。下面是一个 GOPRIVATE 的示例:

GOPRIVATE=*.corp.example.com,rsc.io/private

上面的 GOPRIVATE 表示以 *.corp.example.com 或者 rsc.io/private 开头的 package 都是私有的。

3.3 GOSUMDB

GOSUMDB 的全称为 Go CheckSum Database,用来下载的包的安全性校验问题。包的安全性在使用 GoProxy 之后更容易出现,比如我们引用了一个不安全的 GoProxy 之后然后下载了一个不安全的包,这个时候就出现了安全性问题。对于这种情况,可以通过 GOSUMDB 来对包的哈希值进行校验。当然如果想要关闭哈希校验,可以将 GOSUMDB 设置为 off;如果要对部分包关闭哈希校验,则可以将包的前缀设置到环境变量中 GONOSUMDB 中,设置规则类似 GOPRIVATE。

关于 GOSUMDB 的配置格式为:<db_name>+<publickey>+<url>。

GOSUMDB="sum.golang.org"GOSUMDB="sum.golang.org+<publickey>"GOSUMDB="sum.golang.org+<publickey> https://sum.golang.org"

上面三种配置都是合理的,因为对于 sum.golang.org,Go 自己知道其对应的 publickey 和 url,所以我们只要配置一个名字即可,对于另外一个 sum.golang.google.cn 也是一样。除此之外的,都需要指明 publickey,url 默认是 https://<db_name>。

关于 GOSUMDB 更多的详细信息可以参考:https://golang.org/cmd/go/#hdr-Module_authentication_failures

 

4. 总结


Golang 包管理历经多个版本,目前来看并没有一个完全让开发者满意的方案,比如类似 Java 的 maven 的包管理方式。很多开发者也表示 modules 的管理方式也不是很直观。其实 Golang 的 package 使用 git 的管理方式来管理其实是一个很好的管理方式,我们最需要的其实如何能让普通开发者获取到任何 package 的心智负担降到最低。值得欣慰的是我们确实有看到大家在这个方向上的努力,比如 modules 的 GoProxy。

放眼未来,希望会有一种令大部分普通开发者满意的包管理方式吧。

 

5. Reference


  1. https://research.swtch.com/vgo

  2. https://github.com/golang/go/wiki/Modules

  3. https://roberto.selbach.ca/intro-to-go-modules/

  4. https://roberto.selbach.ca/playing-with-go-modules/

  5. https://semver.org/

  6. https://golang.org/cmd/go/#hdr-Module_authentication_failures

  7. https://golang.org/doc/go1.13#modules

  8. https://goproxy.io

  9. https://github.com/goproxy/goproxy.cn

  10. https://codeengineered.com/blog/2018/golang-godep-to-vgo/

 
首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Golang error 的突围 下一篇Golang 调用 C/C++,例子式教程

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目