关于Golang Go语言中 Go Modules 团队开发时候私有库的问题

发布于 1周前 作者 itying888 来自 Go语言

关于Golang Go语言中 Go Modules 团队开发时候私有库的问题

背景:公司有两个私有项目放在私有 git 上,这里叫 A 和 B,A 项目有引用 B 的包

有两个问题请教下大家:
1、go mod 会自动下载最新 tag 的代码,如果没有会自动引入最新的 master 提交,这样没问题。但是有 tag 的情况下只会引入 tag,没法引用最新的代码(如果 B 有改动必须打 Tag ?)
2、上面的问题可以用 replace 的方案解决,但是如果团队开发,大家的 gopath 都不一致,go mod 文件会有多份,如何解决?

谢谢大家


更多关于关于Golang Go语言中 Go Modules 团队开发时候私有库的问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

13 回复
  1. 可以指定 git commit
    2. 团队开发在一个机器下面?多份怎么理解呢?

更多关于关于Golang Go语言中 Go Modules 团队开发时候私有库的问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


  1. go get REPO_URL@master
    2. replace 到相对路径或者另一个 URL 都可以


1、指定 master 后也会自动更新到最后一个 tag ( tag 代码可能旧于 master,但是他还是会优先 tag )
2、不是的,是指大家各自配置的 GOPATH,或者说项目在电脑里的路径不一致,我想绝对路径会不一样。后来发现相对路径也行。。最后以相对路径解决了

谢谢


1、会以 tag 优先的
2、相对路径是对的,另一个 url 又会出现 1 的问题,版本无法保持最新

使用 git commit checksun 不是 master,另外你 A 仓库是不是没有 go.mod

go get -u github.com/xx/xxxx@master 应该就可以,运行后自动更新 go.mod ,版本号应该是 v0.0.0-date-hash 的形式。


都有 go.mod ,感觉楼下说的手动 go get 下私有仓库,指定 branch 下载,触发 go mod 自己维护会变成 v0.0.0 xxxxxx 的形式应该是可行的



是的 手动 get 下 让 go.mod 自动生成
谢谢两位

因为这个问题,我滚回了 govendor。

可以尝试下楼上大家说的解决方案哦

被说蒙蔽了,go mod 不是有版本吗,大家的 gopath 不一样没啥子问题啊,go mod 将 package 缓存在本地,而且有版本,版本定义好不就行吗

关于Golang中Go Modules在团队开发时私有库的问题,以下是一些专业的解答和建议:

首先,Go Modules是Golang自1.11版本引入的依赖管理工具,它允许项目在GOPATH之外的位置创建,并方便地管理依赖关系。当使用公有库作为依赖时,通常不会遇到问题。然而,当涉及到私有库时,就需要进行一些额外的配置。

对于私有库,你需要设置GOPRIVATE环境变量,以告知Go Modules哪些仓库是私有的,不应该通过代理去访问。例如,如果你的私有库托管在gitee.com上,你可以通过go env -w GOPRIVATE=gitee.com来设置。

此外,如果你的私有库不支持HTTPS协议,你还需要进行一些额外的配置,比如使用SSH来替代HTTPS进行访问。这通常涉及到修改git的全局配置,以及可能还需要设置GOINSECURE环境变量来允许不安全的连接(但请注意,这种做法会降低安全性,应谨慎使用)。

最后,建议团队在开发过程中,尽量使用HTTPS协议来托管私有库,并遵循Go Modules的最佳实践来管理依赖关系。这样可以确保项目的安全性和可维护性。

希望这些信息能帮助你解决Go Modules在团队开发时私有库的问题。

回到顶部