go module使用,go mod 更新依赖

  go module使用,go mod 更新依赖

  Glide主要用于前提Go的版本管理。下面是Go 1.11之后官方支持的版本管理工具mod。

  关于mod有三个官方命令:go help mod,go help modules和go help module-get帮助你知道如何使用它。

  设置GO111MODULE可以用环境变量go11module打开或关闭模块支持,该变量有三个可选值:off、on和auto,默认值为auto。

  GO111MODULE=off没有模块支持,GO会从GOPATH和vendor文件夹中寻找包。GO111MODULE=on模块支持它。go会忽略GOPATH和vendor文件夹,只下载依赖项根据go.mod GO111MODULE=auto,在$GOPATH/src之外且根目录下有go.mod文件时打开模块支持。GOPATH在使用模块的时候是没有意义的,但是它还是会把下载的依赖项存放在$GOPATH/pkg/mod中,也会把go install的结果放在$GOPATH/bin中。

  Go命令下载下载模块到本地缓存)

  从工具或脚本编辑go.mod(编辑go.mod文件)

  图形模块需求图)。

  初始化当前目录中的新模块(初始化当前文件夹中的新模块并创建go.mod文件))

  整理添加缺失和移除未使用的模块(添加缺失的模块和移除未使用的模块)

  供应商将依赖项复制给供应商(将依赖项复制给供应商)

  验证验证依赖项具有预期的内容(验证依赖项)

  为什么解释为什么需要包或模块(解释为什么你需要依赖它们)

  Go Mod用于创建go.mod文件。在一个新项目中,需要执行go mod init来初始化创建的文件go.mod,所有依赖包的路径和版本都会列在go.mod中。

  模块github.com/xfstart07/watcher

  要求(

  github.com/apex/log 1 . 0 . 0版

  github.com/fatih/color版本1.7.0 //间接

  github.com/fsnotify/fsnotify版本1.4.7

  github.com/go-ini/ini版本1.38.2

  github.com/go-kit/kit版本0.7.0

  github.com/go-logfmt/logfmt v 0 . 3 . 0//间接

  Indirect表示该库被间接引用。

  mod vendor命令可以在项目中创建一个vendor文件夹,并复制依赖包。

  moddownload命令用于将依赖包缓存到本地缓存中。

  显示所有导入库信息go list -m -json all -json JSON格式Show All Show All libraries Mod Cache path默认情况下位于$GOPATH/pkg下:

  $GOPATH/pkg/mod我们来看看一个项目的下载文件形式:

  mod ls -lh缓存/下载/github.com/go-kit/kit/@v/

  总计3016

  -rw-r - r - 1 a1工作人员7B月29日15:37名单

  -rw-1 a1 staff 50B 9月29日15:37 v0.7.0.info

  -rw-1 a1 staff 29B 9月29日15:37 v0.7.0.mod

  -rw-r-r-1 a1 staff 1.5M 9月29日15:37 v0.7.0.zip

  -rw-r-r-1 a1 staff 47B 9月29日15:37 v0.7.0.ziphash

  可以看到,项目库会为每个版本创建一个文件夹,文件夹下有版本的信息。

  天坑来了:go mod下载不了google包?对于世界上绝大多数的地鼠来说,Go模块的引入带来了满满的快乐,但对于位于中国大陆的地鼠来说,这种快乐中却带着一丝无奈。原因是在模块感知模式下,go工具不再默认使用传统GOPATH或top vendor下的包,而是在GoPath/pkg/mod下寻找Go模块的本地缓存(这个位置在Go1.11中,可能在以后的版本中这个位置会有变化)。

  由于众所周知的原因,在mainland China,我们无法直接通过go get命令或git clone获得一些第三方的包,最常见的就是golang.org/x.下的优秀包,然而在传统的GOPATH模式下,我们可以先从golang.org/x/xxxs镜像网站github.com/golang/xxx,下载这些包,然后重命名为golang.org/x/xxx.这只能勉强通过开发者的本地编译。或者把这些包放在厂商目录下提交给repo,也可以实现正确的构造。

  但是引入go模块后,一旦工作在模块感知模式,go build就不会关心GoPath或vendor下的包,而是查询GOPATH/pkg/mod中是否有该模块的缓存。如果没有缓存,它会下载模块的某个版本,但对于golang.org/x/xxx,下的模块,它往往无法在mainland China获得。

  有朋友可能会说,你可以通过其他镜像站点继续下载,改个名字。理论上是可行的。但在现实中,这是乏味的。我们先来看看go模块的专用本地缓存目录结构:

  /Users/tony/go/pkg/mod $tree -L 7。

  高速缓存

   下载

  golang.org

   x

   文字

   @v

   排行榜

   v0.1.0.info

   v0.1.0.mod

   v0.1.0.zip

   v0.1.0.ziphash

   v0.3.0.info

   v0.3.0.mod

   v0.3.0.ziphash

  golang.org

  十世

  文本@v0.1.0

   text@v0.3.0我们看到mod下面的结构是精心设计的。每个模块的元信息和每个模块不同版本的zip包都存储在缓存/下载下。例如,在这里,我们看到元信息和相应的源代码zip同时golang.org/x/text.的模块v0.1.0和v0.3.0,两个版本的文本模块,v0.1.0和v0.3.0的源代码直接存放在mod下。

  如果我们仍然像在GOPATH模式下一样通过“下载并重命名镜像站”来满足go build的需求,那么我们就需要手动制作某个模块不同版本的元信息和源目录。在制作元信息时,我们还需要知道每个文件内容的生成机制(例如:xx.info、xxx.mod等。).这种方法的“体验”并不好。

  填坑:go模块代理那么问题来了:开启go模块,大陆地鼠如何享受Go模块带来的好处?“解铃还须系铃人”!答案在go 1.11。1.11在引入go模块的同时,还引入了Go模块代理(go help goproxy)。

  默认情况下,get命令直接从vcs服务(如github、gitlab等)下载模块。)无论是在gopath模式还是模块感知模式。但是在Go 1.11中,我们可以通过设置GOPROXY环境变量来做一些改变:让Go命令从其他地方下载模块。例如:

  export GOPROXY=https://goproxy.io

  一旦上述设置生效,后续的go命令将通过go模块下载协议和代理下载特定版本的模块。聪明的朋友一定想到了。如果我们在国外VPS上建立go模块代理服务器的实现,我们将能够通过这个代理下载类似于golang.org/x下的模块。与此同时,一些小问题,如从github.com获得包慢,也可能得到修复。

  很明显,go官方加入Go代理的初衷并不是为了解决下载强外包的后顾之忧。但不可否认的是,GOPROXY让gopher在版本化go的基础上,对模块和包的获取行为增加了一层控制和干预能力。

  围棋模块数据初探围棋模块简介https://ieevee.com/tech/2018/. https://colobu.com/2018/08/27. https://studygolang.com/artic.

  版权归作者所有:原创作品来自博主wx 62 cd9 cc 616d 1,转载授权请联系作者,否则将追究法律责任。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: