V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
liuzhaowei55
V2EX  ›  Go 编程语言

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

  •  1
     
  •   liuzhaowei55 ·
    ysbjlzlx · 2019-03-18 16:27:10 +08:00 · 9596 次点击
    这是一个创建于 2104 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    https://ieevee.com/tech/2019/02/19/go-mod-proxy.html
    2bab
        24
    2bab  
       2019-03-18 18:42:01 +08:00
    Go Mod,毋庸置疑。

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

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

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

    但是大多数人依然使用基于 中心仓库 /版本 的包管理。
    karllynn
        55
    karllynn  
       2019-03-19 10:59:45 +08:00
    1.12 已经集成了。。
    janxin
        56
    janxin  
       2019-03-19 11:08:49 +08:00
    keysona
        57
    keysona  
       2019-03-19 11:09:59 +08:00
    go mod + goproxy

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

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

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

    我们开发是要求限制 init 的使用,如果有需求都是显示调用
    liuxin5959
        72
    liuxin5959  
       2019-03-20 10:21:54 +08:00
    @toma77 Go 还有前端后端之分?
    toma77
        73
    toma77  
       2019-03-20 11:01:04 +08:00
    @liuxin5959 是我司前端要写 go。。
    none
        74
    none  
       2019-03-20 16:20:48 +08:00
    @bigpigeon 莫名其妙的被 @到了 哈哈(o^^o)
    homfen
        75
    homfen  
       2019-03-20 18:49:48 +08:00
    godep 还可以
    renshaojuncool
        76
    renshaojuncool  
       2019-03-20 18:55:11 +08:00 via Android
    推荐 go mod,趋势。现在用的 govendor,很不方便。
    imkerberos
        77
    imkerberos  
       2019-03-28 17:07:51 +08:00
    cargo 你值得拥有.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2812 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 02:48 · PVG 10:48 · LAX 18:48 · JFK 21:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.