Golang 的包管理一定要下下载到 GOPATH 中, 再导入到 Vendor 目录吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
jeeyong
V2EX    Go 编程语言

Golang 的包管理一定要下下载到 GOATH 中, 再导入到 Vendor 目录吗?

  •  
  •   jeeyong 2021-11-28 22:24:14 +08:00 3586 次点击
    这是一个创建于 1412 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Golang 包管理的疑问. 目前的创建项目的顺序是: go mod init

    把可能需要的包都 go get 下载. 编写主文件. go mod tidy

    go mod vendor

    请教, 应该是什么样的姿势? 我希望是直接把项目依赖安装到项目目录中... 比如 npm i xxx 或者像 python 那样有个虚拟环境?

    22 条回复    2021-12-11 11:22:08 +08:00
    Zhouisme
        1
    Zhouisme  
       2021-11-28 22:36:06 +08:00 via Android
    手动 git 下来放项目里,然后再绝对路径引用,就跟项目里的模块引用一样
    Module 管理不香嘛,还可以管理版本
    你这样的需求真是别致...
    jim9606
        2
    jim9606  
       2021-11-28 23:58:51 +08:00
    这年头就不要用 vendor 了,全用 go.mod 就行了,项目里不用放依赖的东西。
    怕网络问题的设置一下 goproxy 就好了。
    icy37785
        3
    icy37785  
       2021-11-29 00:03:07 +08:00 via iPhone
    直接用 go.mod 就好了呀。
    timpaik
        4
    timpaik  
       2021-11-29 00:03:23 +08:00 via Android
    vendor 是上古的临时解决方案,目前已被弃置,有难以更新依赖等问题,不建议使用。
    darksword21
        5
    darksword21  
    PRO
       2021-11-29 01:22:07 +08:00 via iPhone
    搜索的时候可以加上 past year
    missdeer
        6
    missdeer  
       2021-11-29 09:24:42 +08:00
    go.mod 里可以通过 replace 指定包的路径
    eudre
        7
    eudore  
       2021-11-29 09:37:52 +08:00
    在代码里面 import pkg 就好了,然后 gomod init gomod tidy 就自动填充 go.mod 内容并下载依赖到$GOPATH/pkg/mod 里面。

    也可以手动 goget 添加库或者编辑 go.mod 文件。
    Immortal
        8
    Immortal  
       2021-11-29 09:46:37 +08:00
    我们项目目前仍然使用 vendor 并且提交到代码库
    和同事讨论过,主要两个原因:
    - 正如上面说的,怕有难下载的库.可能现在有 goproxy 了好了很多,早期一些 google/x/目录的库都已经迁移或者废弃,很折腾人.
    - CI/CD 编译不需要每次全量 download 依赖
    ruanimal
        9
    ruanimal  
       2021-11-29 10:25:50 +08:00
    @Immortal 感觉这个问题都可以通过将这些依赖同步到私有 git 解决吧
    masterclock
        10
    masterclock  
       2021-11-29 11:22:00 +08:00
    @ruanimal 应该是不行的
    可以通过架设私有 proxy 解决
    Immortal
        11
    Immortal  
       2021-11-29 13:45:06 +08:00
    @ruanimal #9
    现在几乎没有下不到库的问题了 现在基本在 goproxy 都能找到
    jeeyong
        12
    jeeyong  
    OP
       2021-11-29 16:39:57 +08:00
    所以..有人愿意写个过程吗?
    从创建一个项目开始..
    go mod init
    然后呢?
    下载依赖库的姿势呢?就是 go get 吗?
    接下来?
    cloudfstrife
        13
    cloudfstrife  
       2021-11-30 10:22:50 +08:00   1
    go mod vendor 只用于一种情况,那就是:你的代码要在一个不能访问外网的环境下编译的时候,可以在外网 go mod vendro 然后打包,拷贝到内网编译。

    一般可以访问外部网络的环境,我的过程是:
    go mod init xxxx.xxx/xxx/xxx
    touch main.go
    实现功能,过程中如果要增加新的依赖,可以用 go get xxxx.xxxx/xxxx/xxx
    写完用 go mod tidy 自动更新 go.mod
    go build

    一般会写 Makefile ,我有一个仓库,用写了一些常用的 make 指令 ,用于构建 Go 项目:
    https://github.com/cloudfstrife/gomake
    skiy
        14
    skiy  
       2021-11-30 13:22:01 +08:00
    不要说什么 vendor 是“上古临时方案”这种话了。用了开源库,项目稳定了之后,如果不 vendor ,要是源库删除了之后,你就知道抓狂了。整个项目都运行不了。你不能保证引用的库不会被删。
    jeeyong
        15
    jeeyong  
    OP
       2021-12-01 00:55:44 +08:00
    @cloudfstrife 我只是单纯的想把所有依赖都放到项目目录中...这样做让我舒服...
    liaohongxing
        16
    liaohongxing  
       2021-12-01 17:27:31 +08:00
    买个 clash 机场代理吧 ,google 都访问不了 。开发什么
    Kisesy
        17
    Kisesy  
       2021-12-01 23:02:51 +08:00   1
    go mod vendor 挺好的啊,你开发完了,执行一下,依赖库就直接打包到 vendor 目录下了,可以带着到处走,想编译的时候就编译,也不用联网
    用法就是 go mod init xxx ,然后 go get yyyyy ,然后 go mod vendor
    以后想更新依赖就再 go get ,然后再 go mod vendor
    jeeyong
        18
    jeeyong  
    OP
       2021-12-02 10:10:24 +08:00
    @liaohongxing 话说...Clash 我一直不知道怎么添加 Vmess 协议的服务器..
    jeeyong
        19
    jeeyong  
    OP
       2021-12-02 10:10:37 +08:00
    @liaohongxing Clash 只支持订阅模式吗?
    XTTX
        20
    XTTX  
       2021-12-07 16:22:01 +08:00
    @Kisesy 上面的人都不懂 go mod vendor 的价值,就来个 go mod vendor 上古了。 "own your dependencies" "无网络开发"
    jeeyong
        21
    jeeyong  
    OP
       2021-12-08 12:17:22 +08:00
    @XTTX 涉密单位吗? 无网络开发...
    XTTX
        22
    XTTX  
       2021-12-11 11:22:08 +08:00
    @jeeyong 地铁上不能开发吗?飞机上要改点东西呢? 即使不是涉密单位,就不能在意隐私吗?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     917 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 22ms UTC 19:57 PVG 03:57 LAX 12:57 JFK 15:57
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86