Go mod 管理

火星云s1 · · 818 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

扯淡的话,可以跳过
闲来无事,把公司项目的包管理做了一个升级,其实好久之前就想去做升级,一直懒得摆弄,就没当回事,知道本地vendor遇到一些莫名的问题,PC端代码中可以看到github/xxx一个包,包括代码等都可以查看到,push到远程后,vendor里面只是一个@版本号之类的东西~,并没有代码,在服务端编译的时候,如果没有一些特殊配置(梯子),这个vendor+版本号的玩意是会出问题,提示找不到github/xxx这个包。。后来干脆把之前的依赖重搞一遍省的之后头疼????

go mod 简单介绍

  • go语言自诞生起,包依赖管理一直是被各大社区吐槽的点
    项目必须放在GOPATH下,包括依赖的包也需要放GOPATH下
    如果有多个项目,需要依赖不同版本的包,就会很蛋疼
  • 非官方包管理的出现
    • govendor
    • dep
      用法不详述了
      基本就是自动拉包放置在vendor下

在经历了前期很多个版本的混乱下 go官方在golang 1.11版本后加入了go mod,直接砍掉了之前的GOPATH设计,也支持vendor模式,个人觉得真的比之前好用了很多

go mod 说明

  • 在同一目录下的项目(非GOPATH/src目录下),go 会自动去检测,该项目下的go mod(不使用IDE,可以在$GOPATH/mod目录下查看)

    gomod测试目录

    1. p1包执行 go mod init xxx/xxx/p1,此时就会生成一个module
    2. p2去使用p1包如下所示(看这张图的意思,只是想解释一下mod的意思,其实和我们使用java 或者 php 时引入的包一个含义,go项目想要被其他项目引用,需要把自己变成一个模块,也就是需要执行 go mod init xxx/xxx/p1)
      p2使用

      p2使用

在了解了mod的意思之后,其实使用起来很便捷

准备工作

  • GO111MODULE=off: 不适用 modules 功能。
  • GO111MODULE=on: 使用 modules 功能,不会去 GOPATH 下面查找依赖包。
  • GO111MODULE=auto: Golang 自己检测是不是使用 modules 功能。

go mod 使用方式

  • 在项目目录下执行
    go mod init git.staff.qsc.com.cn/common/gateway
    go mod tidy 查找并下载gateway项目依赖的所有包
    go mod vendor 将该模块使用的第三方包移动到vendor下(支持vendor的形式是为了打包更快,大部分公司都已经使用自动化集成,在不依赖工具、环境的情况下,还是将包约束到vendor下比较合理)
  • 一般执行上面三个步骤就完成了mod模块化管理,但其实很多时候并没有这么顺利,基本遇到的问题都是网络代理的问题


    proxy

最后

文章 只是很粗略的介绍了下基本使用,详细内容可参考知乎大神的帖子https://zhuanlan.zhihu.com/p/82109036


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:火星云s1

查看原文:Go mod 管理

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

818 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传