我想从 Goproxy 中删除我的私有包
I want to remove my private package from Goproxy
这是一道围棋模块题。
我的电脑是 运行 go 1.13 并且 go 模块模式已打开。
这是我的 go env
:
GO111MODULE="on"
GOPRIVATE=""
GOPROXY="https://goproxy.io,direct"
起初我写了一个public包用于测试并上传到github。然后我"go get"这个包就独立了。之后我将其设为私有,甚至将其从 github 中删除(我试过 "git clone" 但无法再次下载)。但在我从 github 中删除它后,我可以 "go get" 它。很快我意识到这个包可能缓存在 goproxy.io 或其他代理数据库中。所以我再次设置 GOPROXY="direct" 和 "go get" 这个包并失败了。这个动作证明了我的猜测。
现在是我的问题:
- 如何从 goproxy.io 或其他数据库中删除整个包。
- 有没有安全的go module使用方法,不想把自己的私有代码误上传到其他数据库
我尝试了 STFW,但一无所获。感谢大家阅读和回答这个问题。
如果您不小心发布了一个您打算私有化的包/模块,那么 go.dev: About 页面:
Removing a package
If you would like a package removed, please send an email to go-discovery-feedback@google.com
, with the import path or module path that you want to remove.
但是正如 Adrian 在评论中提到的,不能保证没有人下载您发布的软件包。
如果您希望某些包/模块保持私有,您可以在 GOPRIVATE
、GONOPROXY
、GONOSUMDB
环境变量中枚举它们(使用 glob 模式),这是受尊重的通过 go 工具。
Command go: Environment variables:
GOPRIVATE, GONOPROXY, GONOSUMDB
Comma-separated list of glob patterns (in the syntax of Go's path.Match)
of module path prefixes that should always be fetched directly
or that should not be compared against the checksum database.
See 'go help module-private'.
来自命令 go help module-private
:
The GOPRIVATE environment variable controls which modules the go command
considers to be private (not available publicly) and should therefore not use the
proxy or checksum database. The variable is a comma-separated list of
glob patterns (in the syntax of Go's path.Match) of module path prefixes.
这些变量也可以使用 go env -w
命令设置。您可以使用 go help env
.
获得更多帮助
问题2,今天试了好几次了。
如果你想安全地构建一个私有包,你应该做的最重要的事情是在你构建你的包之前设置 GOPRIVATE
。 GONOPROXY
、GONOSUMDB
将自动设置为与 GOPRIVATE
相同。
现在你可以将代码和 git push
写入私有远程仓库并尝试 go get
它,你将失败并看到类似这样的错误消息:
fatal: could not read Username for 'https://github.com': terminal prompts disabled
Confirm the import path was entered correctly.
If this is a private repository, see https://golang.org/doc/faq#git_https for additional information.
link 告诉我们应该使用 https
link 和你的 username/password 或者只是用 ssh [=55= 替换你的 https link ] 如果你上传一个密钥到远程 ropo。完成后,您将从您的源地址(您的包名称)而不是代理成功 go get
它。
此外,让我们使用go clean -modcache
删除所有go模块缓存并设置GOPRIVATE=""
。我会测试我们的私有包是否上传到proxy
案例一:
设置 GOPROXY="https://goproxy.io"
或其他代理,然后 go get
私有包。
你将面临一个404 Not Found
,它告诉你你从代理中找不到任何东西(这意味着代理中没有任何东西cached/stored)。
案例2:
设置 GOPROXY="direct"
(使用您的包名称的直接地址),然后 go get
私有包。
你将面临这样的错误信息:
verifying {PACKAGENAME}: {PACKAGENAME}: initializing sumweb.Conn: checking tree#{ID}: Get https://sum.golang.org/tile/8/2/000.p/11: dial tcp {IP}:{PORT}: i/o timeout.
go get
函数将尝试使用您的包检查来自 golang.org 数据库的校验和(我不能 link 直接到 google 服务器,所以它显示超时错误/我想如果你可以 link 到 google 服务器,你会得到 404)。它表明,如果我们尝试 go get
没有设置 GOPRIVATE
的私有包,你将失败,因为你无法通过检查。
建议:
如果你想构建你的私有 go 包,你应该首先设置你的 GOPRIVATE
并确保它足够宽以包含你的包名称。
感谢大家阅读和回答这个问题。
这是一道围棋模块题。 我的电脑是 运行 go 1.13 并且 go 模块模式已打开。
这是我的 go env
:
GO111MODULE="on"
GOPRIVATE=""
GOPROXY="https://goproxy.io,direct"
起初我写了一个public包用于测试并上传到github。然后我"go get"这个包就独立了。之后我将其设为私有,甚至将其从 github 中删除(我试过 "git clone" 但无法再次下载)。但在我从 github 中删除它后,我可以 "go get" 它。很快我意识到这个包可能缓存在 goproxy.io 或其他代理数据库中。所以我再次设置 GOPROXY="direct" 和 "go get" 这个包并失败了。这个动作证明了我的猜测。
现在是我的问题:
- 如何从 goproxy.io 或其他数据库中删除整个包。
- 有没有安全的go module使用方法,不想把自己的私有代码误上传到其他数据库
我尝试了 STFW,但一无所获。感谢大家阅读和回答这个问题。
如果您不小心发布了一个您打算私有化的包/模块,那么 go.dev: About 页面:
Removing a package
If you would like a package removed, please send an email to
go-discovery-feedback@google.com
, with the import path or module path that you want to remove.
但是正如 Adrian 在评论中提到的,不能保证没有人下载您发布的软件包。
如果您希望某些包/模块保持私有,您可以在 GOPRIVATE
、GONOPROXY
、GONOSUMDB
环境变量中枚举它们(使用 glob 模式),这是受尊重的通过 go 工具。
Command go: Environment variables:
GOPRIVATE, GONOPROXY, GONOSUMDB Comma-separated list of glob patterns (in the syntax of Go's path.Match) of module path prefixes that should always be fetched directly or that should not be compared against the checksum database. See 'go help module-private'.
来自命令 go help module-private
:
The GOPRIVATE environment variable controls which modules the go command considers to be private (not available publicly) and should therefore not use the proxy or checksum database. The variable is a comma-separated list of glob patterns (in the syntax of Go's path.Match) of module path prefixes.
这些变量也可以使用 go env -w
命令设置。您可以使用 go help env
.
问题2,今天试了好几次了。
如果你想安全地构建一个私有包,你应该做的最重要的事情是在你构建你的包之前设置 GOPRIVATE
。 GONOPROXY
、GONOSUMDB
将自动设置为与 GOPRIVATE
相同。
现在你可以将代码和 git push
写入私有远程仓库并尝试 go get
它,你将失败并看到类似这样的错误消息:
fatal: could not read Username for 'https://github.com': terminal prompts disabled Confirm the import path was entered correctly. If this is a private repository, see https://golang.org/doc/faq#git_https for additional information.
link 告诉我们应该使用 https
link 和你的 username/password 或者只是用 ssh [=55= 替换你的 https link ] 如果你上传一个密钥到远程 ropo。完成后,您将从您的源地址(您的包名称)而不是代理成功 go get
它。
此外,让我们使用go clean -modcache
删除所有go模块缓存并设置GOPRIVATE=""
。我会测试我们的私有包是否上传到proxy
案例一:
设置 GOPROXY="https://goproxy.io"
或其他代理,然后 go get
私有包。
你将面临一个404 Not Found
,它告诉你你从代理中找不到任何东西(这意味着代理中没有任何东西cached/stored)。
案例2:
设置 GOPROXY="direct"
(使用您的包名称的直接地址),然后 go get
私有包。
你将面临这样的错误信息:
verifying {PACKAGENAME}: {PACKAGENAME}: initializing sumweb.Conn: checking tree#{ID}: Get https://sum.golang.org/tile/8/2/000.p/11: dial tcp {IP}:{PORT}: i/o timeout.
go get
函数将尝试使用您的包检查来自 golang.org 数据库的校验和(我不能 link 直接到 google 服务器,所以它显示超时错误/我想如果你可以 link 到 google 服务器,你会得到 404)。它表明,如果我们尝试 go get
没有设置 GOPRIVATE
的私有包,你将失败,因为你无法通过检查。
建议:
如果你想构建你的私有 go 包,你应该首先设置你的 GOPRIVATE
并确保它足够宽以包含你的包名称。
感谢大家阅读和回答这个问题。