首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Golang包必须是v0或v1而不是v2020

为什么Golang包必须是v0或v1而不是v2020
EN

Stack Overflow用户
提问于 2020-06-01 20:54:52
回答 2查看 3.3K关注 0票数 3

我到处读到包必须带有v0或v1标记。为什么标签不能是v2020或v0或v1以外的其他东西。我已经尝试过这个个人,并得到了下面的错误,我使用v2020。

代码语言:javascript
复制
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$ 
EN

回答 2

Stack Overflow用户

发布于 2020-06-01 20:56:52

这是个会议,每个人都很方便。Go模块选择使用被广泛接受的语义版本化v2

Go模块Wiki:

如果我创建了一个go.mod,但不将标记应用到我的存储库,会发生什么? 符号学是模块系统的基础。为了为消费者提供最好的体验,鼓励模块作者应用semver标记(例如v0.1.0或v1.2.3-rc.1),但semver标记并不严格要求:

  1. 为了使go命令按照文档的方式运行,模块必须遵循语义规范。这包括遵循关于如何以及何时允许中断更改的规范。
  2. 没有semver标记的模块由使用者使用伪版本形式的semver记录。通常情况下,这将是v0的主要版本,除非模块作者按照“主要子目录”方法构建了一个“主要子目录”模块。
  3. 因此,不应用series标记且尚未创建“主子目录”的模块实际上是将自己声明为series主版本系列的成员,而基于模块的使用者将将其视为具有series主版本。

在Go模块之前,Dave的一篇有趣的相关博客文章:戈菲斯,请给你的释放贴上标签

我们想要什么?Go软件包的版本管理!我们什么时候想要?昨天! ..。当您开始使用项目中的包时,我们希望我们的Go构建工具能够获取最新的稳定版本. 但就目前情况而言,在2016年,人类或工具无法查看任意git (或mercurial或bzr等)的git代码库,并提出如下问题:

  • 什么版本的这个项目已经发布了?
  • 这个软件的最新稳定版本是什么?
  • 如果我有1.2.3版本,是否有我应该应用的错误修复或安全更新?

原因是Go项目( Go包的存储库)没有版本,至少没有其他语言的朋友使用这个词的方式。Go项目没有版本,因为没有正式的发布过程。

..。我建议Go项目采用SemVer 2.0.0。这是一个很好的标准,很多人都很清楚,不仅仅是Go程序员,语义版本控制将允许人们编写工具,在最小发布过程的基础上构建依赖管理生态系统。

票数 7
EN

Stack Overflow用户

发布于 2020-06-05 19:06:38

重新阅读github.com/golang/go/wiki/…之后,我看到问题不在v2020.y.z,而是目录结构与版本号不匹配。路径abc/def/v 2020 v2020.y.z应该可以工作。感谢您的各种链接。一个很好的例子是github.com/jackc/pgx/v4

下面是要进行版本的项目的步骤:当您想要将版本更改为V2或更高版本时,需要遵循以下步骤。

版本更改前的示例go.mod文件

代码语言:javascript
复制
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
)

版本更改后的示例go.mod文件

代码语言:javascript
复制
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文件导入

代码语言:javascript
复制
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文件导入

代码语言:javascript
复制
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+编号的项:

  1. 编辑go.mod模块行,以包括现有模块路径末尾的主版本号。因此,上面的模块行module gitlab.com/soteapps/packages也会改变module gitlab.com/soteapps/packages/v2100
  2. 项目中所有gitlab.com/soteapps/packages文件中对*.go的所有导入引用都必须更新为gitlab.com/soteapps/packages/{version}。在我们的示例中,这将是下面的gitlab.com/soteapps/packages/v2100
  3. 将更改提交到源代码管理。
    1. 如果你在使用师父,那就承诺掌握。
      1. 在您提交master之后,使用版本号从master创建一个分支。以上示例中的v2100

代码语言:javascript
复制
1. If you are using branch, then commit to a branch with the version name.  `v2100` in the above example.
2. The last step is to create a tag using semantic versioning format (vX.Y.Z) that point to the version branch. `v2100.1.0` would be the tag for this example.
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62140832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档