gpt4 book ai didi

go - 如何为 Go Mod/pkg.go.dev 消费者发布更新包?

转载 作者:行者123 更新时间:2023-12-01 19:59:16 36 4
gpt4 key购买 nike

如何标记他们的 repo ,并让它显示为 go mod和/或 pkg.go.dev?
我已将我的一个软件包转换为 go mod .不过,好像go mod工具本身只能看到我的包的非常旧版本。
编辑:我只是注意到我的旧版本有一个“v”前缀,而我的新标签没有“v”前缀。
这是根本问题吗?该硬性要求记录在哪里?

我的包裹有问题:https://github.com/eduncan911/podcast
还有我的标记版本:https://github.com/eduncan911/podcast/releases

1.4.1
1.4.0
1.3.2
1.3.1
1.3.0 <- this is the current version Go Modules sees available
然而, pkg.go.dev shows :
v1 – github.com/eduncan911/podcast
v1.3.0 – Feb 19, 2017
v1.1.0 – Feb 6, 2017
v1.0.0 – Feb 5, 2017
关于 https://proxy.golang.org/ 的常见问题说:

I committed a new change (or released a new version) to a repository, why isn't it showing up when I run go get -u or go list -m --versions?

In order to improve our services' caching and serving latencies, new versions may not show up right away. If you want new code to be immediately available in the mirror, then first make sure there is a semantically versioned tag for this revision in the underlying source repository. Then explicitly request that version via go get module@version. After one minute for caches to expire, the go command will see that tagged version.


所以,我试过了:
$ go get github.com/eduncan911/podcast@1.3.1
go: cannot use path@version syntax in GOPATH mode
猜测这意味着我需要参与 repo 或 Go 项目;所以,我创建了一个:
$ cat main.go
package main

import (
"fmt"
"github.com/eduncan911/podcast"
)

func main() {
fmt.Print(podcast.MP3)
}
改到这个目录,跑 go mod init ,然后再次运行:
$ go mod download github.com/eduncan911/podcast@1.3.1
go: finding github.com/eduncan911/podcast 1.3.1
$ go mod download github.com/eduncan911/podcast@1.3.2
go: finding github.com/eduncan911/podcast 1.3.2
$ go mod download github.com/eduncan911/podcast@1.4.0
go: finding github.com/eduncan911/podcast 1.4.0
$ go mod download github.com/eduncan911/podcast@1.4.1
go: finding github.com/eduncan911/podcast 1.4.1
好的,没有响应并返回到提示。也许我正在做某事...
$ go run main.go
go: finding github.com/eduncan911/podcast v1.3.0
go: downloading github.com/eduncan911/podcast v1.3.0
go: extracting github.com/eduncan911/podcast v1.3.0
多。
$ go mod graph
github.com/eduncan911/podcast-test github.com/eduncan911/podcast@v1.3.0
github.com/eduncan911/podcast-test github.com/pkg/errors@v0.9.1
也许我需要下载显式版本,就像常见问题解答中所说的 module@version。
我编辑了 go.mod 并指定了 1.3.1。然后:
$ go mod download
go: github.com/eduncan911/podcast@v1.3.1: reading github.com/eduncan911/podcast/go.mod at revision v1.3.1: unknown revision v1.3.1
我的最后一次尝试是回到 FAQ 声明并运行 go get module@version就像它说的:
$ go get github.com/eduncan911/podcast@1.4.1
go: github.com/eduncan911/podcast@v1.4.1: reading github.com/eduncan911/podcast/go.mod at revision v1.4.1: unknown revision v1.4.1
请注意,我在上述某些陈述之间不断更改版本。但每次都是不存在的版本。
我已经等了几个小时并重试了许多这些语句以清除任何缓存。
提前致谢!

最佳答案

OP有两个问题。

  • Go Mod 忽略没有前缀 v 的包标签正如@Flimzy 指出的那样
  • pkg.go.dev一旦被标记,就不会显示/公开新版本,依靠“社区”在找到新版本之前请求更新版本

  • 第一个是一个简单的修复 - 使用 v 重新标记所有内容字首。

    第二个可以通过将其添加到 CICD 管道来修复:
    curl https://sum.golang.org/lookup/github.com/eduncan911/podcast@v1.4.1

    这是强制 pkg.go.dev 更新并使新标签立即可供其他管道运行和测试的最可靠方法。它的工作原理是强制 pkg.go.dev 获取该特定版本的哈希值。如果版本不存在,它将获取它 - 然后将其散列。因此,添加到 Go Mod 数据源。

    我必须注意它没有很好的文档记录,所以 API 可能会随着时间的推移而改变。他们希望你使用 Proxy 命令;但是,在许多测试发布中,我对它的可靠性并不高。但是,上面的 curl 命令每次都能 100% 工作,并且立即可用(重置缓存)。

    关于go - 如何为 Go Mod/pkg.go.dev 消费者发布更新包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60217151/

    36 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com