Golang Go语言1.13今天发布了,感觉Go module比GOPATH难用

发布于 1周前 作者 vueper 来自 Go语言

Golang Go语言1.13今天发布了,感觉Go module比GOPATH难用
很多文章在介绍 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 教程


更多关于Golang Go语言1.13今天发布了,感觉Go module比GOPATH难用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

42 回复
  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 即可。

更多关于Golang Go语言1.13今天发布了,感觉Go module比GOPATH难用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


我的天!!!我居然能回复别人了!!!我刚才好一阵子在 V2EX 上逛都没法儿回别人的 post ……说是得等我注册满 30 天才行😢……

使用 gomodule, 你得能访问 proxy.golang.org 才行,哈哈

比如你有 10 个 Projects,以前都只能放到 GOPATH 下,现在你放哪里都可以了。

推荐使用七牛云运行的 goproxy.cn 哦~做了全球范围的 CDN 加速,速度能快到让你吃惊~😊

官方不是推荐 dep 吗


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 代码没有补全提示

dep 现在已经渐渐退出舞台了…



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



vscode 自动补全的话…抱歉这个我确实不太了解,因为我没用过,我能告诉你的就只有现在大多数 tools 是已经支持 modules 了的,但你的 vscode 插件用到了哪些 tools 我就不清楚了😅

1.是没有设置 VCS。不太理解 VCS 跟 go module 有什么关系,官方教程也是先创建了一个 git 仓库.

vscode 的补全需要装 gopls,你在设置里面把使用语言服务器这个选项打开。

习惯了 Python pip,node npm 当然是 go mod 好用

pip + virtualenv

貌似有些分类是需要 30 天 有些不需要

可以了。请问怎么去掉导入包的下划线,鼠标放在上面会提示“ follow link(ctrl+click)”

go mod 变得越来越好了,现在挺好用的。



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

module go-project

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

嗯嗯,我也发现了,不过目前我只能在 Go 分类下面回复消息…其他的都是 30 天限制…

正版 goland 搞起来啊 vendor 加 go mod 天下无敌,加上私有仓库的 GOPRIVATE,个人企业我觉得都覆盖 90%以上需求了。其他语言自建仓库那个才叫麻烦

#17 到 vscode-go 的 issues 里搜一下吧,已经有人提过这个了

之前也是这样想。用了之后真香。

呵呵哒,你用了就知道

1.当你定义的 module 和 github.com 项目地址相同时,引入的当前项目路径跟正常的 gopath 没两样,即可以决定是否使用 go mod
2. 看文档
3. 在本项目中均可引入,方法同 2
4. vscode 得依靠插件
5. 肯定 init 初始化,tidy 是清理 gomod 引入包的,vendor (暂时没用过)最后使用

遇到大佬,膜拜。

另外,你说 gopath 好用?当你 a 项目要用的扩展包是 v1 版本,b 项目要用 v2 版本时或者扩展包的 master 有更新时,你咋整?在家跟在公司的环境就变了

说 gopath 比 go mod 好用那真的侮辱别人的智商,对于解决实际问题,go mod 比 gopath 好用 100 倍不止,光自动下载依赖这一点就值

lz 提的问题一部分是自己的问题,一部分是生态的问题,不过毕竟 go mod 确实新出,确实需要一些时间给人适应

你都没掌握它的用法,就不要评价什么了
官方 wiki 就很好: https://github.com/golang/go/wiki/Modules

go module 感觉特别好用啊 以前用 glide 有时候有点小问题

go module 才是解决了 gopath 不好用的问题!
很奇怪为什么还在认为 gopath 好用

你问的这些问题都不是问题,谷歌搜一下就好了

go 1.12 就该用 go module 了

go 1.12 暂时不打算升 1.13.不过早就用上 go module 了

就几个命令…

  1. 理论上 go mod init 时的 module 名可以随便取, 但是如果是要作为一个包被其它项目引用,那么就必须遵守一定的规范了,不然到时候 go mod 是引用不到的。打个比方, 如果你的包是托管在 github 上, 那么你的 go module 名就应该是 github.com/xxx/package_name。
    2. 导入当前项目的包也很简单, 就是将你的 go mod 名作为项目根目录就行了
    3. 如果需要导入本地包的化,就需要用到 go mod 的 replace 了, 但是一般不推荐这么做,貌似 replace 只支持绝对路径,这就给协同开发带来了不便,所有建议把包都用 go mod 来管理吧。
    5. init 是初始化 gomod, tidy 是下载引用包,清除无用包,vendor 是将项目中所有的引用包 copy 到当前项目下的 vendor 目录中来。


3.本地其他包也用 go mod 管理,包引用的时候还是要用 replace,不然找不到?
如果所有包都要搞 cvs,感觉很蹩脚。

3.用 replace 导入自己的包,可以编译运行,只是 vscode gplsp 各中问题,导入报错,函数没补全

补上 go.mod
module hehe

go 1.13

require (
github.com/gin-gonic/gin v1.4.0
gopkg.in/ini.v1 v1.46.0
heiheihei v0.0.0-00010101000000-000000000000
papapa v0.0.0-00010101000000-000000000000
)

replace papapa => /home/sma/workspace/gowork/papapa

replace heiheihei => /home/sma/workspace/gowork/heiheihei

“gopls is currently in alpha, so it is not stable”,不想折腾了。

针对您提到的Golang 1.13版本发布的Go module相较于GOPATH难用的问题,以下是我的专业回复:

Go module作为Go语言的新依赖解决方案,在Go1.11版本引入,并在Go1.14版本被官方推荐用于生产环境,它确实带来了许多改进。相较于GOPATH,Go module提供了更精细的依赖管理,解决了版本不一致和依赖冲突等问题。

关于您提到的难用问题,这可能是因为Go module引入了一些新的概念和命令,需要一定的学习和适应过程。同时,由于Go module的生态系统还在不断完善中,一些工具和库可能还没有完全兼容或适配。

然而,从长远来看,Go module是Go语言发展的重要一步,它使得依赖管理更加规范和高效。建议您多尝试使用Go module,并参考官方文档和社区资源来解决遇到的问题。随着Go语言生态系统的不断发展,相信Go module的使用体验也会越来越好。

回到顶部