这是个围棋模块的问题。我的PC正在运行go 1.13和go模块模式。
这是我的go env
GO111MODULE="on"
GOPRIVATE=""
GOPROXY="https://goproxy.io,direct"起初,我编写了一个用于测试的公共包,并将其上传到github。然后我“去拿”这个独立的包裹。之后,我把它变成了私有的,甚至从github中删除了它(我尝试了"git克隆“,再也不能下载了)。但在我把它从github移走后我可以“去拿”它。很快,我意识到这个包可能被缓存在goproxy.io或其他代理数据库中。所以我再次设置了GOPROXY=“直接”和“去获取”这个包,但是失败了。这个行动证明了我的猜测。
现在我的问题是:
我试着做STFW却什么也没发现。感谢大家阅读和回答这个问题。
发布于 2020-02-07 18:43:05
如果您意外地发布了一个包/模块,您想成为私有的,那么go.dev:关于页面:
移除包 如果希望删除包,请向
go-discovery-feedback@google.com发送电子邮件,其中包含要删除的导入路径或模块路径。
但正如禤浩焯在评论中所提到的,没有人下载你发布的包裹。
如果希望某些包/模块保持私有,可以在GOPRIVATE、GONOPROXY、GONOSUMDB环境变量中枚举它们(使用glob模式),这些变量是go工具所尊重的。
GOPRIVATE,GONOPROXY,GONOSUMDB逗号-模块路径前缀的glob模式的分隔列表(在Go的path.Match语法中),这些前缀应该总是直接获取,或者不应该与校验和数据库进行比较。参见“去帮助模块-私有”。
从命令go help module-private
GOPRIVATE环境变量控制go命令认为是私有的模块(不可公开),因此不应该使用代理或校验和数据库。变量是模块路径前缀的逗号分隔列表( Go's path.Match语法中)。
还可以使用go env -w命令设置这些vars。使用go help env,您可能会得到更多关于它的帮助。
发布于 2020-02-08 10:42:50
对于Question2,我今天已经试过几次了。如果希望安全地构建私有包,最重要的是在构建包之前设置GOPRIVATE。而GONOPROXY,GONOSUMDB将自动设置为与GOPRIVATE相同。现在,您可以将代码和git push写到私有的远程回购程序中,并尝试对其进行go get,这样就会失败,并看到一些类似的错误消息:
致命:无法读取“https://github.com”的用户名:禁用终端提示确认导入路径已正确输入。如果这是一个私有存储库,请参阅https以获得更多信息。
这个链接告诉我们,我们应该在用户名/密码中使用https链接,或者在你上传一个键到远程ropo时,只需将https链接替换为ssh链接即可。这样做后,您将成功地从您的源地址(您的包名),而不是代理,它的go get。
Futhurmore,让我们使用go clean -modcache并设置GOPRIVATE=""删除所有go模块缓存。我将测试我们的私有包是否被上传到代理。
案例1:设置GOPROXY="https://goproxy.io"或其他代理,并将私有包设置为go get。U将面对一个404 Not Found,它显示您从代理中找不到任何东西(这意味着没有任何东西被缓存/存储在代理中)。
案例2:设置GOPROXY="direct"(使用package名称的直接地址),然后将私有包设置为go get。你将面临这样的错误信息:
验证{PACKAGENAME}:{PACKAGENAME}:初始化sumweb.Conn:检查tree#{ID}:Get https://sum.golang.org/tile/8/2/000.p/11:拨号tcp {IP}:{端口}:i/o超时。
go get函数将尝试使用您的包检查golang.org数据库中的校验和(我不能直接链接到google,因此显示超时错误/如果您可以链接到google,我猜您将得到404 )。这表明,如果我们尝试go get一个没有设置GOPRIVATE的私有包,您就会失败,因为您无法通过检查。
建议:如果您想要构建您的私有go包,您应该首先设置您的GOPRIVATE,并确保它足够宽,以包括您的包名。
感谢大家阅读和回答这个问题。
https://stackoverflow.com/questions/60117886
复制相似问题