goget, 一个比 go get 更方便的装包工具

2020-07-23 11:32:34 +08:00
 saltbo

介绍

Gopher,你是否每次装包都得打开 GitHub 去搜索,然后 Copy 包的地址,最后再 go get github.com/xxx/xxx,是不是太麻烦了。

对于一些常用的包,我们知道他的名字,但是却记不住他的全路径,所以每次都会重复上述场景。

现在 goget 来解决这个问题。

对比

传统方式:go get -u github.com/gin-gonic/gin

便捷方式:goget gin

项目地址

https://github.com/saltbo/goget

5008 次点击
所在节点    程序员
71 条回复
poppersd
2020-07-23 18:14:21 +08:00
@saltbo goland 反正支持自动导入,vscode 不晓得
saltbo
2020-07-23 18:20:45 +08:00
@poppersd 我觉得你们都在用 GOPATH, 否则不可能自动导入的
renmu123
2020-07-23 18:26:17 +08:00
从别的语言过来的开发者很奇怪 go 竟然没有中心化的包管理工具,好处也是有的,那就是好的包命名不担心被别人抢了(笑
saltbo
2020-07-23 18:30:52 +08:00
@renmu123 这个优点我觉得很好啊,像 rust 里的 crypto 就被人抢占了,但是后面又不维护了,结果就是还有个 rust-crypto 。但是对于刚接触这块儿的人来说最开始肯定是以为 crypto 更好~~
poppersd
2020-07-23 19:05:04 +08:00
@saltbo 老哥自己试试呀。1.14 go modules
HsiungWang
2020-07-23 19:31:31 +08:00
顶楼主,老阴阳人太多了。觉得不爽,你贴一个自己的让其他人掌掌眼,别说那种不会制冰还不能评论电冰箱,这不是一回事。
reus
2020-07-23 19:47:39 +08:00
@Kr98 我一开始就和楼主讲了,结果说了半天居然还觉得有人用 GOPATH 。再说了,就算我把 gin 的导入地址打全了,下次要用,zsh 、fish,甚至 bash 都会记得,直接就能补全。实在没有用这个工具的需要,说了半天都不信,还在那自珍。
nextvay
2020-07-23 20:38:10 +08:00
香~ 已下载
ysmood
2020-07-23 21:18:38 +08:00
感觉所有 go 的 IDE 都支持的很好了,基本都是自动 import 了,如何说服大家不用 IDE 呢?
saltbo
2020-07-23 21:25:10 +08:00
#37 楼这个截图我刚看到 VScode+Language Server 这个我没用过,具体不太清楚。

关于 Goland,经过我测试。

1. 如果你勾选了 Enable Go Modules integration,这时候就算之前在别的项目里 go get 过同一个包,那也是不会在新项目里自动导入的。
2. 如果你关闭了 Enable Go Modules integration,这时候如果之前的项目里 go get 过,在新项目里就可以自动导入了。因为这时候你实际上还是用的 GOPATH (不论项目下有没有 go.mod )

除以上情况,如果你们还能自动导入,可以教教我~
saltbo
2020-07-23 21:26:15 +08:00
ysmood
2020-07-23 21:45:28 +08:00
@saltbo 所以我建议你转个 vscode 试试,我从来只用 module 。哪位朋友的截图你也看到了,是有 go.mod 文件的。

我的意思是 edge case 不足够成为真正的痛点。我安装你这个比如花费 1 分钟。但是我一个月可能只用一次,对于有洁癖的人来说意义在哪呢。

再说了这个功能如此简单,那么多 goland 付费用户,只要去提个需求,人家自动 import 很快就能加上了。

https://github.com/golang/vscode-go/issues/398

如果需要额外功能,不如去 IDE 的网站给人家提个 issue,或者贡献代码给 IDE 项目。

当然如果你要的功能确实和社区矛盾了,那确实该自己发明轮子。但目前的信息上来看合作是更好的方式。
saltbo
2020-07-23 22:50:47 +08:00
@ysmood 不喜欢 vscode,配置起来他麻烦了
jinliming2
2020-07-23 22:51:11 +08:00
@saltbo 首先,使用 Go modules 之后,GOPATH 是依旧存在的。
根据最新的 go 基础文档 https://golang.org/doc/code.html,你安装的第三方包都会被下载到 GOPATH 下的 pkg/mod 目录中:

Module dependencies are automatically downloaded to the pkg/mod subdirectory of the directory indicated by the GOPATH environment variable. The downloaded contents for a given version of a module are shared among all other modules that require that version, so the go command marks those files and directories as read-only.

goimports 会根据 $GOPATH/pkg/mod 下已经安装过的包来实现自动导入(前提是你的项目包含 go.mod ,是一个 Go Modules 项目,否则 goimports 也不会帮你),而 goimports 属于 go 官方工具,所以可以认为是官方的行为。

再说 Goland,在 Go modules 之前,go 要求将项目都放在 $GOPATH/src 下,这也就是“GOPATH 开发模式”的由来。在 Go modules 出来之后,Goland 区分两种模式,Go 和 Go Modules 。
Go 模式,你的项目必须放在 $GOPATH/src 下( Goland 提供了项目 GOPATH 功能,可以临时设置项目路径为 GOPATH ),然后你 go get 的包也会存在 $GOPATH/src 下,这样 Goland 就可以自动导入 $GOPATH/src 下的包了。
而 Go Modules 模式下,Goland 就完全只认 go.mod 中有的包,go.mod 中没有的包完全不认,不会自动去 $GOPATH/pkg/mod 中导入。

但是 Goland 在代码中右键 -> Go Tools -> Goimports File 却可以自动去 $GOPATH/pkg/mod 导入的,因为这个功能调用的是官方的 goimports 工具。但是虽然自动导入了,Goland 依旧显示为红色,不认,你还得再右键 Show Context Actions -> Sync dependencies 同步一遍。

由此,我认为这是 Goland 没遵循 Go Modules 所产生的 bug 。
而 VSCode 因为自身不提供功能,所有功能都依赖 Go 的官方工具,所以可以按照规则自动完成。
GOPATH 开发模式,代码必须放在 $GOPATH/src 下,所有装的包也都在 $GOPATH/src 下。
Go Modules 开发模式,项目中包含 go.mod 文件,所有装的包都在 $GOPATH/pkg/mod 下,按版本共享。

所以你附言 3 说的“搞了半天你们都还在用 GOPATH”是不对的,根据规则,只要 go 版本足够,项目中只要有 go.mod 就是 Go Modules 模式了。Goland 不支持提示只是因为 Goland 没有用官方工具链而产生的 bug,使用 Goland 右键菜单中的官方 goimports 工具可以正确识别 Go Modules 的依赖包。
jinliming2
2020-07-23 23:03:33 +08:00
顺带一提,如果使用 Go 官方工具链的话,go get 几乎都没有用过了。
新项目只要 go mod init ...,然后建个 go 文件开始写就行了,历史装过的包会自动提示、goimports 自动导入,历史没装过的包,直接复制包名放到 import 语句里就行,也不需要 go get,新包会在你 go run 或者 go build 的时候自动下载安装,并更新 go.mod 文件。

讲真,好久都没用过 go get 了……
更新包的话,VSCode 里打开 go.mod 文件有版本提示,点击一下就自动更新了……
ysmood
2020-07-23 23:09:08 +08:00
@saltbo 老哥,vscode 这么简单,哪儿麻烦了啊,我安装到新电脑没配置任何东西,就能 debug golang 了。好奇你怎么用的?
saltbo
2020-07-23 23:16:33 +08:00
但是 Goland 在代码中右键 -> Go Tools -> Goimports File 却可以自动去 $GOPATH/pkg/mod 导入的,因为这个功能调用的是官方的 goimports 工具。但是虽然自动导入了,Goland 依旧显示为红色,不认,你还得再右键 Show Context Actions -> Sync dependencies 同步一遍。

@jinliming2 亲测可以,终于来了个明白人。 解释的很清楚了~
saltbo
2020-07-23 23:17:30 +08:00
@ysmood 我是很久之前用的了 可能当时官方的工具链不完善吧 回头有时间我再试试 vscode
saltbo
2020-07-23 23:23:38 +08:00
@jinliming2 不过反正已经开发完了,虽然这个问题解决了,但是对于历史没有下过的包还是有点用的 哈哈~
reus
2020-07-24 00:09:33 +08:00
@saltbo 不是“终于来了个明白人”,是你终于明白了,别人根本不需要用 go get,也就没有这个痛点,不需要这个工具。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/692439

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX