一:模块门路 (Module Path)
Go 应用 “module path” 来辨别不同的 module 模块,它在 go.mod 文件中被定义,这个文件中还蕴含了这个模块编译所需的其余依赖。如果一个目录中蕴含了 go.mod 文件,那么这个目录就是这个 Go 模块的根目录了。
另外,还要介绍下包(package) 这个概念,它在 Go Modules
呈现之前就曾经存在了。Go 模块中的 “ 包 (package)” 是处于同一目录中的一些源代码文件的汇合,这些文件将被编译在一起。 “ 包门路(package path
) ” 是模块门路和子目录(模块根目录的相对路径)的组合。举个例子,在模块 “golang.org/x/net”
下的 html 目录中有个包,这个包的门路是 “golang.org/x/net/html” 。
总结下来就是: 一个代码仓库能够蕴含多个 Go 模块,一个 Go 模块能够蕴含多个 Go 包。
模块门路是一个 Go 模块的标准名称,用于辨别不通的模块。同时他还是该模块下 Go 包的门路前缀。实践上,模块门路应该至多蕴含两个要害信息:
模块的作用哪里获取该模块
二:版本号与兼容性准则
版本号相当于是一个模块的只读快照,它能够是正式的发布版本,也能够是预公布版本。 每个版本都以字母 v 结尾,后跟一个语义版本,例如 v1.0.0。
总而言之,语义版本由三个由点分隔的非负整数(次要版本、主要版本和补丁版本,从左到右)组成。 补丁版本后能够跟一个以连字符结尾的可选预公布字符串。 预公布字符串或补丁版本后能够跟一个以加号结尾的构建元数据字符串。 例如,v0.0.0、v1.12.134、v8.0.5-pre、
v2.0.9+meta 等都是无效版本。
版本号中的信息代表了这个版本是否是一个稳定版,是否放弃了与之前版本的兼容性。
当保护的模块产生了一些不兼容变更,比方批改了内部可调用的接口或者函数时,须要对主版本号进行递增,并且将次版本号和补丁版本号置为零。比方在模块中移除了一个包。
在模块中增加一些新的函数或者接口,并没有影响模块的兼容性时,须要对次版本号进行递增,并且将补丁版本号置为零。
当修复了一些 bug 或者进行了一些优化时,只须要对补丁版本号进行递增就能够了,因为这些变更不会对曾经公开的接口进行变更。
预公布后缀代表了这个版本号是一个预公布版本。预公布版本号的排序会在正式版本号的后面。举个例子,v1.2.3-pre 会排列在 v1.2.3 后面。