-
Notifications
You must be signed in to change notification settings - Fork 0
09 go mod
Jinxin Chen edited this page Feb 17, 2020
·
1 revision
本文介绍go module相关知识
从1.11版本开始,golang加入了module 功能,开始支持 package 依赖及版本管理。
要想启用此功能,在项目的根目录下,运行命令
go mod init
这个命令会在根目录生成2个文件:
- go.mod
- go.sum
# go.mod
module example.com/hello
go 1.12
添加package有2种方式,一种是直接在go文件中 import package,第二种是用 go get 命令。
第一种方式,对于import的package,如果没有在go mod中声明时,在 go build(等) 时系统会自动查找 package 并加入到 go mod 中
升级 minor version:
go get [package url]
升级 major version:
go get [package url@v[major version]]
在升级之前,可以用 go doc 指令,查看该版本的文档
go doc [package url@v[major version]]
在项目开发过程中,依赖的 package 可能会不断的变化,有的也会不再使用。
go mod tidy 指令可以移除项目中没有使用到的 package,注意,有些 package 并不是项目显示引用,而是其他的 package 间接引用的,这些 package 会在 go.mod 文件中加上 // indirect 注释
- go mod init creates a new module, initializing the go.mod file that describes it.
- go build, go test, and other package-building commands add new dependencies to go.mod as needed.
- go list -m all prints the current module’s dependencies.
- go get changes the required version of a dependency (or adds a new dependency).
- go mod tidy removes unused dependencies.
在发布自己的 module 之前,需要先了解 semantic version 相关知识
- v0: the initial, unstable version
- v1: the first stable version
通过 tag 可以发布对应版本的 package,比如下面的指令发布了 v1.0.0 版本的 package
$ git tag v1.0.0
$ git push origin v1.0.0
可以通过如下命令确认版本是否可用,如果使用了go proxy,则可能需要等待一段时间,其同步之后才可用。
go list -m example.com/[email protected]
在发布 v2 版本之前,首先需了解:
- v0主要版本和预发行版本不保证向后兼容。它们使您可以在对用户做出稳定性承诺之前优化API。但是,v1主要版本及更高版本要求该主要版本内的向后兼容性。
- 不要从您的仓库中删除版本标签。如果发现某个版本的错误或安全问题,请发布新版本。如果人们依赖于您已删除的版本,则其构建可能会失败。同样,发布版本后,请勿更改或覆盖版本。
- 一旦确定模块的API稳定之后,就可以发布 v1.0.0。如果对API进行了更改,则它们将向后兼容(例如,向结构添加新字段),并将包含在新的次要版本中。如果存在错误修复程序(例如,安全修复程序),它们将包含在补丁程序发行版中(或作为次要发行版的一部分)。有时,保持向后兼容性可能会导致API笨拙。没关系。不完善的API比破坏用户的现有代码更好。
- 升级主要版本之前,需要衡量利弊。 更改会导致开发和维护开销,并且需要下游用户的投资才能进行迁移。项目越大,这些开销往往越大。只有在确定了令人信服的理由之后,才进行主要版本更改。一旦确定了令人震惊的重大变更原因,我们建议在master分支中开发多个主要版本,因为它与各种现有工具兼容。
golang从v2版本开始,需要在根目录建立v2,v3...等子目录,并在该目录下有完整的代码,步骤如下:
- 新建目录v2
- 将所有项目相关文件复制到v2目录中,包含go.mod
- 修改v2目录中的package地址,将原有的地址(比如github.com/googleapis/gax-go)修改为(github.com/googleapis/gax-go/v2)
- 打测试tag
- git tag v2.0.0-alpha.1
- git push origin v2.0.0-alpha.1
- 确认无误后,打正式tag
- git tag v2.0.0
- git push origin v2.0.0