Go mod 管理

扯淡的话,可以跳过
闲来无事,把公司项目的包管理做了一个升级,其实好久之前就想去做升级,一直懒得摆弄,就没当回事,知道本地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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容