为什么Golang软件包必须是v0或v1,而不是v2020
我到处都读到包必须有v0或v1的标签。为什么标签不能是v2020或v0或v1以外的东西。我已经尝试过这个个人,并且在使用v2020时出现以下错误为什么Golang软件包必须是v0或v1,而不是v2020,go,go-modules,Go,Go Modules,我到处都读到包必须有v0或v1的标签。为什么标签不能是v2020或v0或v1以外的东西。我已经尝试过这个个人,并且在使用v2020时出现以下错误 Scotts-Mac-mini:seeding syacko$ go mod tidy go: errors parsing go.mod: /Users/syacko/workspace/sotesoft/src/utils/seeding/go.mod:10: require gitlab.com/soteapps/packages: versio
Scotts-Mac-mini:seeding syacko$ go mod tidy
go: errors parsing go.mod:
/Users/syacko/workspace/sotesoft/src/utils/seeding/go.mod:10: require gitlab.com/soteapps/packages: version "v2020.2.0" invalid: module contains a go.mod file, so major version must be compatible: should be v0 or v1, not v2020
Scotts-Mac-mini:seeding syacko$
这是一个惯例,对每个人来说都很方便。Go模块选择使用广泛接受的 如果我创建了一个go.mod,但没有将semver标记应用到我的存储库,会发生什么?
是模块系统的基础。为了给消费者提供最佳体验,鼓励模块作者使用semver VCS标签(例如v0.1.0或v1.2.3-rc.1),但并不严格要求使用semver VCS标签:
- 这个项目发布了哪些版本
- 这个软件的最新稳定版本是什么
- 如果我有版本1.2.3,是否有我应该应用的错误修复或安全更新
重新阅读github.com/golang/go/wiki/…,我发现问题不在于v2020.y.z,而在于目录结构与版本号不匹配。路径abc/def/v2020-v2020.y.z应该可以工作。谢谢你的各种链接。一个很好的工作示例是github.com/jackc/pgx/v4 以下是您要使用的项目版本的步骤: 当您要将版本更改为V2或更高版本时,需要遵循以下步骤 更改版本前的示例go.mod文件
module gitlab.com/soteapps/packages
go 1.14
require (
github.com/aws/aws-sdk-go v1.32.4
github.com/jackc/pgconn v1.5.0
github.com/jackc/pgx/v4 v4.6.0
golang.org/x/net v0.0.0-20200602114024-627f9648deb9 // indirect
golang.org/x/text v0.3.3 // indirect
)
module gitlab.com/soteapps/packages/v2100
go 1.14
require (
github.com/aws/aws-sdk-go v1.32.4
github.com/jackc/pgconn v1.5.0
github.com/jackc/pgx/v4 v4.6.0
golang.org/x/net v0.0.0-20200602114024-627f9648deb9 // indirect
golang.org/x/text v0.3.3 // indirect
)
版本更改后的示例go.mod文件
module gitlab.com/soteapps/packages
go 1.14
require (
github.com/aws/aws-sdk-go v1.32.4
github.com/jackc/pgconn v1.5.0
github.com/jackc/pgx/v4 v4.6.0
golang.org/x/net v0.0.0-20200602114024-627f9648deb9 // indirect
golang.org/x/text v0.3.3 // indirect
)
module gitlab.com/soteapps/packages/v2100
go 1.14
require (
github.com/aws/aws-sdk-go v1.32.4
github.com/jackc/pgconn v1.5.0
github.com/jackc/pgx/v4 v4.6.0
golang.org/x/net v0.0.0-20200602114024-627f9648deb9 // indirect
golang.org/x/text v0.3.3 // indirect
)
更改前导入Golang文件示例
package sDatabase
import (
"context"
"encoding/json"
"fmt"
"strings"
"github.com/jackc/pgx/v4"
"github.com/jackc/pgx/v4/pgxpool"
"gitlab.com/soteapps/packages/sError"
"gitlab.com/soteapps/packages/sLogger"
)
const (
更改后导入Golang文件示例
package sDatabase
import (
"context"
"encoding/json"
"fmt"
"strings"
"github.com/jackc/pgx/v4"
"github.com/jackc/pgx/v4/pgxpool"
"gitlab.com/soteapps/packages/v2020/sError"
"gitlab.com/soteapps/packages/v2020/sLogger"
)
const (
具有v2+版本号的项目:
module gitlab.com/soteapps/packages
也将更改module gitlab.com/soteapps/packages/v2100
gitlab.com/soteapps/packages
的所有导入引用必须更新为gitlab.com/soteapps/packages/{version}
。在我们的示例中,这将如下所示,gitlab.com/soteapps/packages/v2100
v2100.1.0
将是本例的标记所以规则5说,“版本1.0.0定义了公共API。版本号在本次发布后增加的方式取决于此公共API及其变化方式。”。它并没有说1是可用的。此外,规则8规定“如果公共API中引入任何向后不兼容的更改,则主版本X(X.y.z | X>0)必须递增。它还可能包括次要和补丁级别的更改。当主版本递增时,补丁和次要版本必须重置为0。”也就是说,允许值大于1。继续。。。那么,“这是一种惯例,对每个人都很方便。Go模块选择使用广泛接受的语义版本控制v2。”如何符合语义版本控制的原则/指导。V2020.y.z是一个有效的语义版本。使用semver约定,go工具可以自动检测最新版本,并告知当前(本地)版本是否有可以在不破坏构建的情况下获取的更新,假设模块所有者遵循semver规则。版本
v4.6.0
与semver2兼容。v2020.0.0
也与semver2兼容,只是不v2020
。在Icza的帮助下(见下面的注释),我发现以下内容:重新阅读后,我发现问题与v2020.y.z无关,它的目录结构与版本号不匹配。路径abc/def/v2020-v2020.y.z应该可以工作。谢谢你的各种链接。一个很好的工作示例是github.com/jackc/pgx/v4。不要将版本号2020用于包/版本控制,因为这意味着存在许多早期版本