Golang Go语言中的包管理一定要下载到 GOPATH 中再导入到 Vendor 目录吗?
Golang Go语言中的包管理一定要下载到 GOPATH 中再导入到 Vendor 目录吗?
Golang 包管理的疑问. 目前的创建项目的顺序是: go mod init
把可能需要的包都 go get 下载. 编写主文件. go mod tidy
go mod vendor
请教, 应该是什么样的姿势? 我希望是直接把项目依赖安装到项目目录中... 比如 npm i xxx 或者像 python 那样有个虚拟环境?
手动 git 下来放项目里,然后再绝对路径引用,就跟项目里的模块引用一样
Module 管理不香嘛,还可以管理版本
你这样的需求真是别致…
更多关于Golang Go语言中的包管理一定要下载到 GOPATH 中再导入到 Vendor 目录吗?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
这年头就不要用 vendor 了,全用 go.mod 就行了,项目里不用放依赖的东西。
怕网络问题的设置一下 goproxy 就好了。
直接用 go.mod 就好了呀。
vendor 是上古的临时解决方案,目前已被弃置,有难以更新依赖等问题,不建议使用。
搜索的时候可以加上 past year
go.mod 里可以通过 replace 指定包的路径
在代码里面 import pkg 就好了,然后 gomod init gomod tidy 就自动填充 go.mod 内容并下载依赖到$GOPATH/pkg/mod 里面。
也可以手动 goget 添加库或者编辑 go.mod 文件。
我们项目目前仍然使用 vendor 并且提交到代码库
和同事讨论过,主要两个原因:
- 正如上面说的,怕有难下载的库.可能现在有 goproxy 了好了很多,早期一些 google/x/目录的库都已经迁移或者废弃,很折腾人.
- CI/CD 编译不需要每次全量 download 依赖
感觉这个问题都可以通过将这些依赖同步到私有 git 解决吧
应该是不行的
可以通过架设私有 proxy 解决
#9
现在几乎没有下不到库的问题了 现在基本在 goproxy 都能找到
所以…有人愿意写个过程吗?
从创建一个项目开始…
go mod init
然后呢?
下载依赖库的姿势呢?就是 go get 吗?
接下来?
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
不要说什么 vendor 是“上古临时方案”这种话了。用了开源库,项目稳定了之后,如果不 vendor ,要是源库删除了之后,你就知道抓狂了。整个项目都运行不了。你不能保证引用的库不会被删。
我只是单纯的想把所有依赖都放到项目目录中…这样做让我舒服…
买个 clash 机场代理吧 ,google 都访问不了 。开发什么
go mod vendor 挺好的啊,你开发完了,执行一下,依赖库就直接打包到 vendor 目录下了,可以带着到处走,想编译的时候就编译,也不用联网
用法就是 go mod init xxx ,然后 go get yyyyy ,然后 go mod vendor
以后想更新依赖就再 go get ,然后再 go mod vendor
话说…Clash 我一直不知道怎么添加 Vmess 协议的服务器…
Clash 只支持订阅模式吗?
上面的人都不懂 go mod vendor 的价值,就来个 go mod vendor 上古了。 “own your dependencies” “无网络开发”
涉密单位吗? 无网络开发…
地铁上不能开发吗?飞机上要改点东西呢? 即使不是涉密单位,就不能在意隐私吗?