Go Module 和 GOPATH 模式之间的区别?

如题,初学 Go 语言,目前我对这两者的了解是:

  • GOPATH 是 Go 语言中旧的依赖管理模式,该模式下似乎无法对依赖的版本进行控制
  • 为了解决 GOPATH 模式下的一些问题,Go 引入了 vender 机制,使得 Go 寻找依赖的顺序变成了 vender -> GOROOT -> GOPATH
  • 为了进一步解决 GOPATH 模式下的问题,Go 引入了 Module 机制,在该模式下,我们可以对依赖的版本进行控制

同时,在 Go 1.14 下并设置 GO111MODULE=off 时,项目位于 GOPATH 外好像没有影响,可以正常寻找到 GOPATH 下的依赖。

我的问题是:

  1. 过去,Go 项目是否必须在 GOPATH 下,如果不在 GOPATH 下存在什么影响?
  2. 现在,当 GO111MODULE 的值不同时,项目位于 GOPATH 下和 GOPATH 外有什么不同?
  3. Go Module 解决了 GOPATH 模式下的什么问题?有什么区别?
  4. 现在 Go 语言开发时,一般是怎样管理依赖的,是 Go Module + vender 吗?
阅读 6.6k
1 个回答
  1. 过去不在 GoPath 下就不能编译,找不到程序
  2. Go1.11 go module 相当于dev阶段,开启就可以使用 go mod 功能,用 go mod 可以不在src目录下开发,不用必须在src目录下,参考1
  3. 直观的感觉,现在可以随处可以创建项目,不用扎堆 src 目录下。解决的核心问题是:版本依赖。写程序会用很多三方库,但是三方库可能版本会发生变化,go mod 就可以管理依赖的版本,可看 go.mod文件
  4. vender扔掉,不要管。全部使用 go mod。任何位置新建立项目马上开始写代码,github上开源的现在基本都是 go mod 方式了
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏