go1.13 今天发布了,感觉 go module 比 GOPATH 难用

2019-09-04 16:30:04 +08:00
 wsseo
很多文章在介绍 go module 的时候都会提到“新手会疑惑为什么代码要放到 GOPATH 里”,以此引出 go module。
搜了一些关于 go module 的教程,还是有很多疑惑,感觉比 GOPATH 难理解。
用 GOPATH 的时候,需要什么包,提前安装到 GOPATH 就完事,代码补全由 vscode 插件完成。

以下是关于 go module 的疑问:
1.为什么 go mod init [module] 一定要指定 module,这个 module 名有什么意义,可以随便取吗
2.怎么导入当前工作空间的包
3.怎么导入其他目录的包
4.vscode 怎么使用 go module,以前代码补全直接到 GOPATH 目录下找
5.如果用 vscode 写一个新程序,go mod init,go mod tidy,go mod vendor 分别在哪个阶段执行



求一个容易理解的 go module 教程
13333 次点击
所在节点    Go 编程语言
42 条回复
aofei
2019-09-04 16:35:00 +08:00
1. 可以;
2. 使用了 Go modules 后所有的 import path 都得以 module path 开头,当前工作目录的话就以步骤 1 中的 module path 开头;
3. 如果你指的“其他目录”是别的模块的,同理步骤 2,如果指的是普通文件夹,那得用 `go mod replace` 替换为你的目标路径模块;
4. 现在大多数 IDE 的代码不全等 tools 都已经适配了 Go modules,所以基本可用;
5. 虽然我没用过 VSCode 的,但如果它有现成的 Go 插件的话那么可以直接使用,插件会自动处理,你只需将 `GO111MODULE=on` 即可。
aofei
2019-09-04 16:36:01 +08:00
我的天!!!我居然能回复别人了!!!我刚才好一阵子在 V2EX 上逛都没法儿回别人的 post ……说是得等我注册满 30 天才行😢……
fangdingjun
2019-09-04 16:45:25 +08:00
使用 gomodule, 你得能访问 proxy.golang.org 才行,哈哈
Hellert
2019-09-04 16:48:19 +08:00
比如你有 10 个 Projects,以前都只能放到 GOPATH 下,现在你放哪里都可以了。
aofei
2019-09-04 16:49:09 +08:00
@fangdingjun 推荐使用七牛云运行的 goproxy.cn 哦~做了全球范围的 CDN 加速,速度能快到让你吃惊~😊
lcode
2019-09-04 16:51:03 +08:00
官方不是推荐 dep 吗
wsseo
2019-09-04 16:52:28 +08:00
@aofei
1.执行 go mod init 提示我一定要带 module
"go: cannot determine module path for source directory /home/xxx/xxxx/xxxx/godemo (outside GOPATH, module path must be specified)"
2,3 大致理解了
4,5 go1.13 中 GO111MODULE 默认是 auto,vscode 代码没有补全提示
aofei
2019-09-04 16:54:42 +08:00
@lcode dep 现在已经渐渐退出舞台了…
aofei
2019-09-04 16:57:02 +08:00
@wsseo

如果你是在你的项目根目录,且根目录包含了 .git 等 VCS 目录或者 Gopkg.lock 等旧版依赖管理文件,那么此时你 go mod init 时是不需要指定 module path,它会自己生成一个,不满意的话你到时候还可以再改。
aofei
2019-09-04 16:58:23 +08:00
@wsseo

vscode 自动补全的话…抱歉这个我确实不太了解,因为我没用过,我能告诉你的就只有现在大多数 tools 是已经支持 modules 了的,但你的 vscode 插件用到了哪些 tools 我就不清楚了😅
a308057848
2019-09-04 16:58:55 +08:00
不是难用不难用的问题, 问题是各种兼容问题
wsseo
2019-09-04 17:07:04 +08:00
@aofei 1.是没有设置 VCS。不太理解 VCS 跟 go module 有什么关系,官方教程也是先创建了一个 git 仓库.
keyv
2019-09-04 17:11:02 +08:00
@wsseo vscode 的补全需要装 gopls,你在设置里面把使用语言服务器这个选项打开。
iPhoneXI
2019-09-04 17:13:26 +08:00
习惯了 Python pip,node npm 当然是 go mod 好用
iPhoneXI
2019-09-04 17:14:06 +08:00
@iPhoneXI pip + virtualenv
emeab
2019-09-04 17:24:04 +08:00
@aofei 貌似有些分类是需要 30 天 有些不需要
wsseo
2019-09-04 17:50:20 +08:00
@keyv 可以了。请问怎么去掉导入包的下划线,鼠标放在上面会提示“ follow link(ctrl+click)”
StarUDream
2019-09-04 17:53:01 +08:00
go mod 变得越来越好了,现在挺好用的。
aofei
2019-09-04 17:53:15 +08:00
@wsseo

Go modules 和 VCS 并没有直接关系,就算不用 VCS 也是可以直接 Modules 的,但这种场景下你 go mod init 时就必须指定一个 module path 了,因为如果你不指定的话 go 没有参考依据,不知道怎么来。
Stevenv
2019-09-04 18:08:43 +08:00
module go-project

- 引用项目中某个目录(project/src/test): " go-project/src/test"
- 引用第三包: "github.com/gin-gonic/gin"

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

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

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

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

© 2021 V2EX