美文网首页
Go mod 管理

Go mod 管理

作者: 火星云s1 | 来源:发表于2019-12-17 15:43 被阅读0次

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

    相关文章

      网友评论

          本文标题:Go mod 管理

          本文链接:https://www.haomeiwen.com/subject/fqpsnctx.html