所以现在 Golang Go语言到底应该用什么包管理器?
所以现在 Golang Go语言到底应该用什么包管理器?
手头项目有有 Go 写的,但自己有段时间没有关注 Go 了,之前官方有钦定一个包管理器,现在主流的是哪个?
dep
Go mod。现在都开始或者已经切到这个上面了。升级一下 golang 就行。
说起来,想稍带问问 golang 现在用哪个 error 包? go2 的出来还有一段距离,但如果用 pkg/errors,可能很快就得切,还能和 go2 兼容吗?
我们前端用的 govendor,后端用的 go mod,前端不用 go mod 主要是前端都是 vscoder,没有提示跳转。。
go 命令自带的
谁还用其他的就是自找麻烦
go mod 啊
go1.11 开始支持了。
但还是吐槽下,go 的包管理真的垃圾
什么? go 有包管理器?
go mod,vscode 用 LSP,不用 LSP 会非常难用
go 的包管理基本就等于用 git 管理,没有其他包管理工具有这个灵活性。
如果你说的是 error 包装之类的功能的话,现在标准库里面的 error 包就有了
gopm
go mod + 1
go dep、vgo 或者 go mod
#9
不觉得,要我说还是 rust 的包管理好。
使用 fmt 的 Errorf 功能或者 golang.org/x/xerrors,功能会在 1.13 版本中进入标准库
go mod + goland
啊 我看的是 github 上面的源码 可能是还没合并到主版本吧
如果你指的灵活性是指 安装指定 tag,commit,branch git repo 依赖,nodejs 几年前就有了,rust 应该也有
官方搞了 go mod,所以以后这是趋势,写代码中去不用千里迢迢跑到像 java 一样深的 GOPATH 目录下了。
但是这货有一些坑,比如默认忽略 vendor,对于 cgo 的库,用前需要 configure 根据环境的生成 c 代码的基本无解,go mod vendor 不会把他认为你用不到的文件放到 vendor 文件夹,即使他已经下载下来了,一些要 go generate 或者 cgo 的依赖文件就很麻烦
请问下 go mod 垃圾在哪? 真心不懂 求问 , 尝试了下 demo 觉得还好啊
go mod
go mod。可以搭配 gocenter 食用,口感更佳
https://ieevee.com/tech/2019/02/19/go-mod-proxy.html
Go Mod,毋庸置疑。
要说 Go 的这些管理器哪里难用,其实是因为跟其他平台比,比如 Maven 和 NPM,所以才显得它太基础。
讲道理就得举个例子,比如是否可以暴露 API 让我写点脚本管理一些依赖的细节,我有 100 个直接依赖,然后带来 500 个间接依赖,可能为了兼容,我不一定就按照『优先版本高的』原则去采纳每个间接依赖,这方面 Gradle 可能就很 easy 的实现了。
推荐是 go mod,但是在 Mac 下 用 go mod 管理的 VSCode 有点卡,所以我暂时用 dep
#21
版本号有时候太难看了,尤其是那些没有打 tag 的 git 依赖库。
没有中央仓库,想想如果依赖库的 git 仓库被删除,会产生很多问题。
对比 npm,maven,gradle,cargo,pypi,go mod 有些不办理,也不方便。期待以后的改善吧,其实可以借鉴 rust 的 cargo。听说以后会有官方中央仓库。
现在可以用 GoCenter,用封装的 goc,能满足需求。
说是 2019 年会有官方的 center。
#27
去查了下,仓库太少了,发现还不如我现在用的 goproxy.io 。
go mod 比 dep 好用
glide
现在不是 2019 年吗
go mod,然后所有依赖整理到 vendor,push 的时候带着 vendor。
#8 超级难用,感谢推荐
#33 哎呀 at 错了
go 的包管理是真垃圾,感觉还没 rust 的 cargo 好用。
go mod 我觉得已经可以了,中心仓库对项目其实也没啥提升?依赖库被删不放心可以自己 fork 一个,用两年也没看见被删的库。包管理这种东西我真觉得够用就好,而且明明 go get 易用性实用性都很强,我敢说大部分项目 go get 就搞定了
dep 是官方的包管理器吧?
“你没有 xx 特性 /功能” “某某有也没啥提升”
“你没有 xx 特性 /功能” “够用就好”
“你没有 xx 特性 /功能” “在进步,好很多了,多努力”
“你为什么没有 xx 特性 /功能” “某某更烂你咋不说"
也许还会有诸如
"又不是不能用”
“你是不是针对*”
"太平洋又没加盖(划掉,走错片场了),开源的觉得不好用有本事你就提 PR 啊"
类似的逻辑在哪都能见到很多呢。。不过我这条回复对解决楼主问题是毫无帮助,和问题也毫不相干,只是对本帖众多回复的一个观察
[go mod]( https://github.com/golang/go/wiki/Modules) +1
何必阴阳怪气的呢直接点名就好啊,不服可以反驳。至少目前我们自己项目用 go mod 之前用 govendor,都是把依赖直接固化在项目内。单元测试 覆盖测试 持续集成都是没有问题的。我说对项目提升不大也是建立在至少目前我们自己场景没有遇见啥坑的情况下说的。中央仓库对我上面那条场景有提升?
真要说有啥问题,一个是翻墙拉依赖,还有个引用的两个库依赖同一个不同版本的包这种。前者 goproxy.io 上面有人提过了,自己内网搭建一个代理都可以。后者写项目两年了,实际压根没遇到。所以现在到底 go 的包管理做成啥样你才会觉得够用?
有没有人普及一下和 python 的 pip,node 的 npm 的比较
go mod + 自己写的透明代理方案( sower )
固化依赖到项目中在我们的开发规范是很重要的一个环节,可以有效节省其他组员管理 更新 下载的时间成本。也可以规避掉一些因为版本代码不一致的隐藏 bug。
pip 我没做过固化的方案,只写过 requirements.txt 。对于不需要编译的包还好,需要编译的时候就一言难尽。
npm 固化依赖大家都知道啥叫依赖地狱了,200M 起步…不敢想象大型项目得吃多少。
其他包管理大同小异,跟 go 最大不同就是有中央仓库,版本标记比较清晰。go mod 虽然现在版本也有了,但是一些旧的包没有遵循 go mod 规范。
npm 最大区别是每个依赖都有自己的独立依赖,不知道现在有没有改进,其他包管理就不熟悉了。
go mod 1.11+官方自带
gx
go mod
一直觉得 G 家那种,所有依赖用最新的思路,才是正路。只是我们凡人无法理解……
因为不是每个公司都有人有能力去跟踪维护依赖库。。。
go mod + vscode 自动补全好卡( slow )
我司用 govendor
vendor 也一起提交到 git
我觉得关键点是,Go 家能做到 真·主干开发
你好,请问这个 lsp 是怎么用的,还有我用了 go mod 在 mac 的 vscode 上跳转十分慢,有什么办法吗?
#9 其他语言的包管理工具也支持 git,比如 npm。
但是大多数人依然使用基于 中心仓库 /版本 的包管理。
1.12 已经集成了。。
可以使用这个工具 https://github.com/saibing/bingo,使用方法就是先安装,然后配置 vscode-go 即可。
https://github.com/saibing/bingo#vscode-go
go mod + goproxy
真爽。谁用谁知道…
https://github.com/gogradle/gogradle 我对这个很感兴趣,虽然主要是个构建工具
go mod + goproxy
前端是怎么用上 go 的?
wasm 和 gopherjs 都可以
写权限中间件,聚合和包装接口,渲染模板什么的。。
不是,go mod 才是 dep 是第三方的。
dep was the “official experiment.”
有点吃惊,居然有这么多人推荐 dep 甚至其他第三方的。 每个版本更新的博客还是很推荐读一读的。
glide 推的好少
dep WAS the "official EXPERIMENT."
应该说 dep 是曾经的官方试验品
现在就是第三方,官方不要了
很多人根本就不是用 go 的,只是道听途说
踩过 glide 和 module 来述苦一下
都不好使
glide 有时候的更新策略很迷,不会更新最新的包,有时候要删掉 vendor 旧包才更新
module 允许存在 2 个同样的包的不同版本,如果你这个包在 init 有共享资源就坑爹了,比如在 init 注册了一个 http 服务之类的,而且 module 在使用 etcd3.3 会有错误要手动 ,各种奇怪问题层出不断
init 这个问题比较坑,主要还是开发的锅,grpc 也有类似的坑爹问题。
我们开发是要求限制 init 的使用,如果有需求都是显示调用
Go 还有前端后端之分?
是我司前端要写 go。。
godep 还可以
推荐 go mod,趋势。现在用的 govendor,很不方便。
cargo 你值得拥有.
对于Golang(Go语言)来说,目前最推荐使用的包管理器是Go Modules。以下是关于Go Modules的详细介绍:
一、官方推荐
Go Modules是Go官方推出的包管理系统,自Go 1.11版本引入,并在Go 1.13版本中成为默认的包管理方式。它解决了早期Go语言包管理中的许多问题,提供了更强大的功能和更方便的使用体验。
二、主要特点
- 自动化依赖管理:Go Modules会自动解析并下载项目依赖的包,并确保不同版本之间的兼容性。
- 版本控制:通过go.mod文件,可以明确指定项目依赖的版本,防止不同版本之间的冲突。
- 无需GOPATH:使用Go Modules时,不再需要将项目放置在GOPATH目录下,可以在任意位置创建和管理项目。
- 模块代理支持:Go Modules支持通过模块代理(如proxy.golang.org)加速依赖包的下载,提升开发效率。
三、使用建议
对于新项目,建议直接使用Go Modules进行依赖管理。对于正在使用其他包管理工具的项目,也建议逐步迁移到Go Modules,以享受其带来的便利和性能提升。
综上所述,Go Modules凭借其官方背景、自动化管理、版本控制等优势,成为目前Golang最推荐的包管理器。