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

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

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

    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  
       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 指定包的路径
    eudore
        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   ·   实用小工具   ·   1616 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 16:55 · PVG 00:55 · LAX 08:55 · JFK 11:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.