liuzhaowei55
V2EX  ›  Go 编程语言

所以现在 Go 到底应该用什么包管理器?

By liuzhaowei55 at 2019 年 3 月 18 日 · 10808 次点击

手头项目有有 Go 写的,但自己有段时间没有关注 Go 了,之前官方有钦定一个包管理器,现在主流的是哪个?

77 条回复  •  2019-03-28 17:07:51 +08:00
myyou
   1
myyou  
   2019 年 3 月 18 日   ❤️ 1
go mod
nimrc
   2
nimrc  
   2019 年 3 月 18 日
dep
rayhy
   3
rayhy  
   2019 年 3 月 18 日 via Android
Go mod。现在都开始或者已经切到这个上面了。升级一下 golang 就行。

说起来,想稍带问问 golang 现在用哪个 error 包? go2 的出来还有一段距离,但如果用 pkg/errors,可能很快就得切,还能和 go2 兼容吗?
toma77
   4
toma77  
   2019 年 3 月 18 日
我们前端用的 govendor,后端用的 go mod,前端不用 go mod 主要是前端都是 vscoder,没有提示跳转。。
reus
   5
reus  
   2019 年 3 月 18 日
go 命令自带的

谁还用其他的就是自找麻烦
fengyj
   6
fengyj  
   2019 年 3 月 18 日
go mod 啊
go1.11 开始支持了。
但还是吐槽下,go 的包管理真的垃圾
pmispig
   7
pmispig  
   2019 年 3 月 18 日
什么? go 有包管理器?
janxin
   8
janxin  
   2019 年 3 月 18 日   ❤️ 1
go mod,vscode 用 LSP,不用 LSP 会非常难用
reus
   9
reus  
   2019 年 3 月 18 日
@huiyifyj go 的包管理基本就等于用 git 管理,没有其他包管理工具有这个灵活性。
sulinehk
   10
sulinehk  
   2019 年 3 月 18 日 via Android
@rayhy 如果你说的是 error 包装之类的功能的话,现在标准库里面的 error 包就有了
meteor957
   11
meteor957  
   2019 年 3 月 18 日
gopm
rayhy
   12
rayhy  
   2019 年 3 月 18 日 via Android
@sulinehk https://golang.org/pkg/errors/
这个吗?还是只有一个 new 啊
Heavytiger
   13
Heavytiger  
   2019 年 3 月 18 日
go mod + 1
kiwier
   14
kiwier  
   2019 年 3 月 18 日
go dep、vgo 或者 go mod
fengyj
   15
fengyj  
   2019 年 3 月 18 日
@reus #9
不觉得,要我说还是 rust 的包管理好。
janxin
   16
janxin  
   2019 年 3 月 18 日
@rayhy 使用 fmt 的 Errorf 功能或者 golang.org/x/xerrors,功能会在 1.13 版本中进入标准库
xfriday
   17
xfriday  
   2019 年 3 月 18 日
go mod + goland
sulinehk
   18
sulinehk  
   2019 年 3 月 18 日 via Android
@rayhy 啊 我看的是 github 上面的源码 可能是还没合并到主版本吧
releaseme
   19
releaseme  
   2019 年 3 月 18 日
@reus 如果你指的灵活性是指 安装指定 tag,commit,branch git repo 依赖,nodejs 几年前就有了,rust 应该也有
justfly
   20
justfly  
   2019 年 3 月 18 日
官方搞了 go mod,所以以后这是趋势,写代码中去不用千里迢迢跑到像 java 一样深的 GOPATH 目录下了。

但是这货有一些坑,比如默认忽略 vendor,对于 cgo 的库,用前需要 configure 根据环境的生成 c 代码的基本无解,go mod vendor 不会把他认为你用不到的文件放到 vendor 文件夹,即使他已经下载下来了,一些要 go generate 或者 cgo 的依赖文件就很麻烦
yanjinbin
   21
yanjinbin  
   2019 年 3 月 18 日
@huiyifyj 请问下 go mod 垃圾在哪? 真心不懂 求问 , 尝试了下 demo 觉得还好啊
mnhkahn
   22
mnhkahn  
   2019 年 3 月 18 日
go mod
silenceshell
   23
silenceshell  
   2019 年 3 月 18 日 via Android
go mod。可以搭配 gocenter 食用,口感更佳

https://ieevee.com/tech/2019/02/19/go-mod-proxy.html
2bab
   24
2bab  
   2019 年 3 月 18 日
Go Mod,毋庸置疑。

要说 Go 的这些管理器哪里难用,其实是因为跟其他平台比,比如 Maven 和 NPM,所以才显得它太基础。

讲道理就得举个例子,比如是否可以暴露 API 让我写点脚本管理一些依赖的细节,我有 100 个直接依赖,然后带来 500 个间接依赖,可能为了兼容,我不一定就按照『优先版本高的』原则去采纳每个间接依赖,这方面 Gradle 可能就很 easy 的实现了。
haozibi
   25
haozibi  
   2019 年 3 月 18 日
推荐是 go mod,但是在 Mac 下 用 go mod 管理的 VSCode 有点卡,所以我暂时用 dep
fengyj
   26
fengyj  
   2019 年 3 月 18 日 via Android
@yanjinbin #21
版本号有时候太难看了,尤其是那些没有打 tag 的 git 依赖库。
没有中央仓库,想想如果依赖库的 git 仓库被删除,会产生很多问题。
对比 npm,maven,gradle,cargo,pypi,go mod 有些不办理,也不方便。期待以后的改善吧,其实可以借鉴 rust 的 cargo。听说以后会有官方中央仓库。
silenceshell
   27
silenceshell  
   2019 年 3 月 18 日
@huiyifyj
现在可以用 GoCenter,用封装的 goc,能满足需求。
说是 2019 年会有官方的 center。
fengyj
   28
fengyj  
   2019 年 3 月 18 日
@silenceshell #27
去查了下,仓库太少了,发现还不如我现在用的 goproxy.io 。
ecrazy
   29
ecrazy  
   2019 年 3 月 18 日 via iPhone
go mod 比 dep 好用
littlewing
   30
littlewing  
   2019 年 3 月 18 日 via iPhone
glide
simple2025
   31
simple2025  
   2019 年 3 月 18 日
@silenceshell 现在不是 2019 年吗
mason961125
   32
mason961125  
   2019 年 3 月 18 日
go mod,然后所有依赖整理到 vendor,push 的时候带着 vendor。
THaGKI9
   33
THaGKI9  
   2019 年 3 月 18 日 via iPhone
@janxin #8 超级难用,感谢推荐
THaGKI9
   34
THaGKI9  
   2019 年 3 月 18 日 via iPhone
@THaGKI9 #33 哎呀 at 错了
fivestrong
   35
fivestrong  
   2019 年 3 月 18 日 via Android
go 的包管理是真垃圾,感觉还没 rust 的 cargo 好用。
blless
   36
blless  
   2019 年 3 月 19 日 via Android
go mod 我觉得已经可以了,中心仓库对项目其实也没啥提升?依赖库被删不放心可以自己 fork 一个,用两年也没看见被删的库。包管理这种东西我真觉得够用就好,而且明明 go get 易用性实用性都很强,我敢说大部分项目 go get 就搞定了
ericgui
   37
ericgui  
   2019 年 3 月 19 日
@ecrazy dep 是官方的包管理器吧?
Sparetire
   38
Sparetire  
   2019 年 3 月 19 日 via Android
"你没有 xx 特性 /功能" "某某有也没啥提升"
"你没有 xx 特性 /功能" "够用就好"
"你没有 xx 特性 /功能" "在进步,好很多了,多努力"
"你为什么没有 xx 特性 /功能" "某某更烂你咋不说"
也许还会有诸如
"又不是不能用"
"你是不是针对*"
"太平洋又没加盖(划掉,走错片场了),开源的觉得不好用有本事你就提 PR 啊"
类似的逻辑在哪都能见到很多呢。。不过我这条回复对解决楼主问题是毫无帮助,和问题也毫不相干,只是对本帖众多回复的一个观察
OldPanda
   39
OldPanda  
   2019 年 3 月 19 日
blless
   40
blless  
   2019 年 3 月 19 日 via Android   ❤️ 1
@Sparetire 何必阴阳怪气的呢直接点名就好啊,不服可以反驳。至少目前我们自己项目用 go mod 之前用 govendor,都是把依赖直接固化在项目内。单元测试 覆盖测试 持续集成都是没有问题的。我说对项目提升不大也是建立在至少目前我们自己场景没有遇见啥坑的情况下说的。中央仓库对我上面那条场景有提升?
真要说有啥问题,一个是翻墙拉依赖,还有个引用的两个库依赖同一个不同版本的包这种。前者 goproxy.io 上面有人提过了,自己内网搭建一个代理都可以。后者写项目两年了,实际压根没遇到。所以现在到底 go 的包管理做成啥样你才会觉得够用?
zqx
   41
zqx  
   2019 年 3 月 19 日 via Android
有没有人普及一下和 python 的 pip,node 的 npm 的比较
duanquanyong
   42
duanquanyong  
   2019 年 3 月 19 日 via iPhone
go mod 很好用,而且下个版本支持中央仓库了
wweir
   43
wweir  
   2019 年 3 月 19 日 via iPhone
go mod + 自己写的透明代理方案( sower )
blless
   44
blless  
   2019 年 3 月 19 日 via Android
@zqx 固化依赖到项目中在我们的开发规范是很重要的一个环节,可以有效节省其他组员管理 更新 下载的时间成本。也可以规避掉一些因为版本代码不一致的隐藏 bug。
pip 我没做过固化的方案,只写过 requirements.txt 。对于不需要编译的包还好,需要编译的时候就一言难尽。
npm 固化依赖大家都知道啥叫依赖地狱了,200M 起步…不敢想象大型项目得吃多少。

其他包管理大同小异,跟 go 最大不同就是有中央仓库,版本标记比较清晰。go mod 虽然现在版本也有了,但是一些旧的包没有遵循 go mod 规范。
npm 最大区别是每个依赖都有自己的独立依赖,不知道现在有没有改进,其他包管理就不熟悉了。
5oiR5piv5YK76YC8
   45
5oiR5piv5YK76YC8  
   2019 年 3 月 19 日
go mod 1.11+官方自带
bruinxs
   46
bruinxs  
   2019 年 3 月 19 日
gx
jlkm2010
   47
jlkm2010  
   2019 年 3 月 19 日
go mod
index90
   48
index90  
   2019 年 3 月 19 日
一直觉得 G 家那种,所有依赖用最新的思路,才是正路。只是我们凡人无法理解……
zzn
   49
zzn  
   2019 年 3 月 19 日
@index90 因为不是每个公司都有人有能力去跟踪维护依赖库。。。
cloverstd
   50
cloverstd  
   2019 年 3 月 19 日 via iPhone
go mod + vscode 自动补全好卡( slow )
peyppicp
   51
peyppicp  
   2019 年 3 月 19 日 via iPhone
我司用 govendor
vendor 也一起提交到 git
index90
   52
index90  
   2019 年 3 月 19 日
@zzn 我觉得关键点是,Go 家能做到 真·主干开发
Gea
   53
Gea  
   2019 年 3 月 19 日
@janxin 你好,请问这个 lsp 是怎么用的,还有我用了 go mod 在 mac 的 vscode 上跳转十分慢,有什么办法吗?
runze
   54
runze  
   2019 年 3 月 19 日
@reus #9 其他语言的包管理工具也支持 git,比如 npm。

但是大多数人依然使用基于 中心仓库 /版本 的包管理。
karllynn
   55
karllynn  
   2019 年 3 月 19 日
1.12 已经集成了。。
janxin
   56
janxin  
   2019 年 3 月 19 日
keysona
   57
keysona  
   2019 年 3 月 19 日
go mod + goproxy

真爽。谁用谁知道....
h2ero
   58
h2ero  
   2019 年 3 月 19 日
go mod
burtbai
   59
burtbai  
   2019 年 3 月 19 日
https://github.com/gogradle/gogradle 我对这个很感兴趣,虽然主要是个构建工具
strahe
   60
strahe  
   2019 年 3 月 19 日
go mod + goproxy
puperSB
   61
puperSB  
   2019 年 3 月 19 日
@toma77 前端是怎么用上 go 的?
reus
   62
reus  
   2019 年 3 月 19 日
@puperSB wasm 和 gopherjs 都可以
toma77
   63
toma77  
   2019 年 3 月 19 日
@puperSB 写权限中间件,聚合和包装接口,渲染模板什么的。。
ecrazy
   64
ecrazy  
   2019 年 3 月 19 日 via iPhone
@ericgui 不是,go mod 才是 dep 是第三方的。
ericgui
   65
ericgui  
   2019 年 3 月 20 日
@ecrazy dep was the "official experiment."
markx
   66
markx  
   2019 年 3 月 20 日
有点吃惊,居然有这么多人推荐 dep 甚至其他第三方的。 每个版本更新的博客还是很推荐读一读的。
hzfyjgw
   67
hzfyjgw  
   2019 年 3 月 20 日 via Android
glide 推的好少
reus
   68
reus  
   2019 年 3 月 20 日
@ericgui dep WAS the "official EXPERIMENT."

应该说 dep 是曾经的官方试验品

现在就是第三方,官方不要了
reus
   69
reus  
   2019 年 3 月 20 日
@markx 很多人根本就不是用 go 的,只是道听途说
bigpigeon
   70
bigpigeon  
   2019 年 3 月 20 日
踩过 glide 和 module 来述苦一下
都不好使
glide 有时候的更新策略很迷,不会更新最新的包,有时候要删掉 vendor 旧包才更新
module 允许存在 2 个同样的包的不同版本,如果你这个包在 init 有共享资源就坑爹了,比如在 init 注册了一个 http 服务之类的,而且 module 在使用 etcd3.3 会有错误要手动 @none,各种奇怪问题层出不断
janxin
   71
janxin  
   2019 年 3 月 20 日
@bigpigeon init 这个问题比较坑,主要还是开发的锅,grpc 也有类似的坑爹问题。

我们开发是要求限制 init 的使用,如果有需求都是显示调用
liuxin5959
   72
liuxin5959  
   2019 年 3 月 20 日
@toma77 Go 还有前端后端之分?
toma77
   73
toma77  
   2019 年 3 月 20 日
@liuxin5959 是我司前端要写 go。。
none
   74
none  
   2019 年 3 月 20 日
@bigpigeon 莫名其妙的被 @到了 哈哈(o^^o)
homfen
   75
homfen  
   2019 年 3 月 20 日
godep 还可以
renshaojuncool
   76
renshaojuncool  
   2019 年 3 月 20 日 via Android
推荐 go mod,趋势。现在用的 govendor,很不方便。
imkerberos
   77
imkerberos  
   2019 年 3 月 28 日
cargo 你值得拥有.
The Go Programming Language
› http://golang.org/
› Go Playground
Go Projects
› Revel Web Framework
© 2026 V2EX · 161ms · 3.9.8.5