首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >让Go Module重新Respect Go Vendor (一)

让Go Module重新Respect Go Vendor (一)

作者头像
nevermosby
发布2020-05-11 17:20:32
7390
发布2020-05-11 17:20:32
举报

升级Go  1.11后遇到的问题

  • Go module怎么使用
  • 开始不respect vendor目录,导致go build失败,第三方依赖找不到了
  • 是抛弃Vendor,从此投入Module怀抱?

Go module快速入门

引入Go module后,新增了一组go mod命令,可以通过go help mod查看使用帮助,如下图所示,目前一共有8个子命令,每个子命令都有多种使用参数,感觉学习成本抖增。

想要知道到底怎么用,当然是亲自动手demo一把。推荐入门文章:https://roberto.selbach.ca/intro-to-go-modules/

  1. 首先创建一个testmod包,作为工具类,并使用go mod init github.com/nevermosby/testmod命令,把这个包初始化成一个module,本质上就是生成一个go.mod文件,内容如下:
$ cat go.mod
module github.com/nevermosby/testmod
  1. 然后为testmod在github上作tag,通过git push命令release这个tag版本。这样,对于testmod来说,它就有了第一个版本v1.0.0
  2. 接着在创建一个usemod包,作为主程序类,这个主程序里会引用testmod这个工具类作为依赖:
import github.com/nevermosby/testmod

并使用go mod init moduleName命令生成go.mod文件,相当于创建了一个module模块,内容为:

$ cat go.mod
module moduleName

执行go build会把import依赖包生成为require语句块,如下所示:

module moduleName
require github.com/nevermosby/testmod v1.0.0

这样,usemod包就能通过go module机制管理依赖了。

  1. 此时,我们有想法升级testmod工具类提供的接口,比如为接口添加新的参数,完成代码修改后,再打个tag并release,第二个版本v2.0.0就诞生了。
  2. 彼时,usemod作为testmod使用方,也需要更新相关代码,并且在调用新接口的同时,保留老的接口使用方式,因此需要同时import两个版本的testmod,更新usermod的import部分:
import (
    "github.com/nevermosby/testmod"
    testmodv2 "github.com/nevermosby/testmod/v2"
)

随后重新执行go build命令,会更新go.mod文件为:

module moduleName
require (
    github.com/nevermosby/testmod v1.0.0
    github.com/nevermosby/testmod/v2 v2.0.0
)

en, 现在就可以同时引入两个版本的testmod了,是不是很有趣!

go-mod-example
go-mod-example

下一篇,我们一起来show some respect to Vendor。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年10月1日2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 升级Go  1.11后遇到的问题
  • Go module快速入门
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档