不懂就问,关于 Go 的包管理

2019 年 6 月 13 日
 gramyang

Go 官方推荐,很多人也爱这么写,就是在 import 时直接写 github 地址。不同于 Java 里面下载 jar 包,而是实时从 github 上下载代码。

问题来了,如果 github 上的代码被修改,或者更新了,导致功能变更或者代码结构变更怎么办? go 可以像 Java 一样导入某一个版本的代码吗?

5226 次点击
所在节点    Go 编程语言
30 条回复
Cbdy
2019 年 6 月 13 日
使用 go mod
acehow
2019 年 6 月 13 日
不是实时的吧,要先用 go get 命令拉下来的。包管理的话,可以有 go mod init 生成一个文件,里面会有依赖的包版本,但也要看 github 上标签的质量。
xiri
2019 年 6 月 13 日
现在可以用 go mod,默认会记录版本号
mritd
2019 年 6 月 13 日
martinqian
2019 年 6 月 13 日
import 只是从 GOROOT 对应环境下导入指定的包,如果没找到,会报错而不是尝试去下载。

下载包使用的是 go get 命令,如果想更新,则可以使用 go get -u。
clino
2019 年 6 月 13 日
能指定 branch 或者 tag 吗?
Muninn
2019 年 6 月 13 日
go mod 不能锁定小版本,只会锁定大版本。

但是 golang 建议小版本不能改 API,事实上知名的包也确实没人改。

所以不用太害怕这个问题了。
gramyang
2019 年 6 月 13 日
@Muninn 明显不对好吧,你的依赖代码不能指定版本,那你的工程随时会崩溃,这怎么可能是小问题呢,必须上 go mod 啊
martinqian
2019 年 6 月 13 日
go get github.com/repo@0.0.1

go mod edit -require github.com/repo@0.0.1

如上面各位 V 友所说,推荐使用 go mod,这个是从 1.11 版本开始支持的,在基于项目的包管理上提供了方便。
zealic
2019 年 6 月 13 日
go mod + vendor 模式就行

```
go mod vendor
go build -mod=vendor
```

产生的 vendor 文件夹加入代码仓库即可。
Hellert
2019 年 6 月 13 日
import 语句后面的 github 字符串不能理解为网址,而是 GOPATH 里面的包路径。
Baldwin
2019 年 6 月 13 日
可以 fork 到自建仓库,有需要的时候在更新
littlemoney
2019 年 6 月 13 日
问下各位大佬,有在公司项目中使用 go mod 的吗
thet
2019 年 6 月 13 日
go 2 好像有 mirror,包会更集中吧,现在觉得 vendor+go mod 比较好用
ChristopherWu
2019 年 6 月 13 日
@Hellert 其实这样理解也没有问题,要先到此 url 下载包,放到 GOPATH 此路径中,再引用- -
shilyx
2019 年 6 月 13 日
go mod 虽然好用,但我的 idea 的 golang 插件不支持自动跳转了

遗憾的滚回到 go get 上
gy0624ww
2019 年 6 月 13 日
赶紧 golang 的包管理很乱啊
之前用 glide,然后说不维护了,官方出了 dep,
现在又出来个这个 go mod.
这个 dep 和 go mod, 哪个好啊。

咋就没个统一的解决方案呢 ,选择困难症啊
Hellert
2019 年 6 月 13 日
@gy0624ww 以后就是 gomod 了,这是官方的,统一了。年内发布的 golang 1.13 版本开始就是废弃 GOPATH,默认 gomod 了。
gy0624ww
2019 年 6 月 13 日
@Hellert dep 不也是官方出的吗。。这么快就不用了?
Hellert
2019 年 6 月 13 日
@ChristopherWu 嗯嗯,gomod 模式下,import 可以理解为远程路径,因为会根据这个路径去自动下载;但在 GOPATH 模式下设计初衷就是本地路径。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/573409

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX