Go 官方推荐,很多人也爱这么写,就是在 import 时直接写 github 地址。不同于 Java 里面下载 jar 包,而是实时从 github 上下载代码。
问题来了,如果 github 上的代码被修改,或者更新了,导致功能变更或者代码结构变更怎么办? go 可以像 Java 一样导入某一个版本的代码吗?
Go 官方推荐,很多人也爱这么写,就是在 import 时直接写 github 地址。不同于 Java 里面下载 jar 包,而是实时从 github 上下载代码。
问题来了,如果 github 上的代码被修改,或者更新了,导致功能变更或者代码结构变更怎么办? go 可以像 Java 一样导入某一个版本的代码吗?
1
Cbdy Jun 13, 2019 via Android 使用 go mod
|
2
acehow Jun 13, 2019 via Android
不是实时的吧,要先用 go get 命令拉下来的。包管理的话,可以有 go mod init 生成一个文件,里面会有依赖的包版本,但也要看 github 上标签的质量。
|
3
imkuang Jun 13, 2019 via Android
现在可以用 go mod,默认会记录版本号
|
4
mritd Jun 13, 2019 via iPhone
go mod +1 https://goproxy.io
|
5
martinqian Jun 13, 2019
import 只是从 GOROOT 对应环境下导入指定的包,如果没找到,会报错而不是尝试去下载。
下载包使用的是 go get 命令,如果想更新,则可以使用 go get -u。 |
6
clino Jun 13, 2019 via Android
能指定 branch 或者 tag 吗?
|
7
Muninn Jun 13, 2019
go mod 不能锁定小版本,只会锁定大版本。
但是 golang 建议小版本不能改 API,事实上知名的包也确实没人改。 所以不用太害怕这个问题了。 |
9
martinqian Jun 13, 2019
go get github.com/[email protected]
go mod edit -require github.com/[email protected] 如上面各位 V 友所说,推荐使用 go mod,这个是从 1.11 版本开始支持的,在基于项目的包管理上提供了方便。 |
10
zealic Jun 13, 2019
go mod + vendor 模式就行
``` go mod vendor go build -mod=vendor ``` 产生的 vendor 文件夹加入代码仓库即可。 |
11
Hellert Jun 13, 2019 import 语句后面的 github 字符串不能理解为网址,而是 GOPATH 里面的包路径。
|
12
Baldwin Jun 13, 2019
可以 fork 到自建仓库,有需要的时候在更新
|
13
littlemoney Jun 13, 2019
问下各位大佬,有在公司项目中使用 go mod 的吗
|
14
thet Jun 13, 2019 via Android
go 2 好像有 mirror,包会更集中吧,现在觉得 vendor+go mod 比较好用
|
16
shilyx Jun 13, 2019
go mod 虽然好用,但我的 idea 的 golang 插件不支持自动跳转了
遗憾的滚回到 go get 上 |
17
gy0624ww Jun 13, 2019
赶紧 golang 的包管理很乱啊
之前用 glide,然后说不维护了,官方出了 dep, 现在又出来个这个 go mod. 这个 dep 和 go mod, 哪个好啊。 咋就没个统一的解决方案呢 ,选择困难症啊 |
18
Hellert Jun 13, 2019
@gy0624ww 以后就是 gomod 了,这是官方的,统一了。年内发布的 golang 1.13 版本开始就是废弃 GOPATH,默认 gomod 了。
|
20
Hellert Jun 13, 2019
@ChristopherWu 嗯嗯,gomod 模式下,import 可以理解为远程路径,因为会根据这个路径去自动下载;但在 GOPATH 模式下设计初衷就是本地路径。
|
21
shawndev Jun 13, 2019
go mod + goproxy
|
23
randm Jun 13, 2019
体验过 go mod 后又回到 GOPATH 主要方便
|
25
blless Jun 13, 2019 via Android
goproxy.cn 速度更快一点
|
26
abmin521 Jun 13, 2019 via Android
至今没解决两个包依赖一个库的不同版本 那能怎么办 fork 呗
还有似乎不能清理? |
28
Muninn Jun 13, 2019
@gramyang 不好意思,我说的不太对。 用了 go module 后,在最后一次 go test 或者 go build 自动补完 go.mod 文件后提交,是会锁定所有版本的。
我当时是想说我没事干就 go get -u,也并没有崩过,这是因为 go mod 的依赖版本冲突后版本选择大的那个版本导致的,知名的库一般都会比较注意,都是向前兼容的。 |
29
fengyj Jun 13, 2019
现在都使用 go mod 搭配 GOPROXY=https://goproxy.io
|
30
aimerforreimu Jun 17, 2019
https://go.likeli.top 这个速度也很快~
|