说一说go mod

aside section ._1OhGeD · · 11221 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

[toc]

说一说go mod

写在前面,我们要切换到go mod吗

go mod是官方力推的go模块依赖管理的工具,有官方的背书,肯定是要用的。go1.13已经默认支持了,所以迟早要切到go mod, 势不可挡。

go mod什么

go mod能管理的依赖包的版本,能保证在不同地方构建,获得的依赖模块是一致的。

没有go mod之前如何管理包依赖

没有go mod之前,有go deps, vendor等方法来解决。

go mod如何工作

  • go 1.11通过设置环境变量GO111MODULE来决定是否启用
export GO111MODULE=off  #关闭go mod
export GO111MODULE=on   # 开启mod
export GO111MODULE=auto # GOPATH/src不启用,但是还要看当前目录或者上级目录是否存在go.mod,go.sum,如果存在,则启用go mod

这里面有个坑,就是设置为auto的时候并且在GOPATH/src下,如果该目录或者父目录存在go.mod, go.sum文件,则go mod也是启用的

  • go1.13已经默认开启

切换到go mod可能遇到的问题

  • go mod download非常慢
export GOPROXY=https://mirrors.aliyun.com/goproxy/ #设置拉取的代理 
export GOPROXY=file://本地路径  # 也可以从本地加载
  • go mod下载的包不对

可下面的命令下载指定的版本

如果发现编译不过,可以通过下面命令列出指定mod的版本,然后go get拉指定版本号的包
go list -m -versions rsc.io/sampler
go get rsc.io/sampler@v1.3.1

1.13可以彻底不要GOPATH了

  • go mod 会贯穿go tool工具链,这句话什么意思呢,意思是go test, go vet, go build等工具都会先检查依赖。go mod会自动工作。如果你依赖没有下载好,则会一直卡住。

* go mod init # 初始化当前目录为模块根目录,生成go.mod, go.sum文件
* go mod download # 下载依赖包
* go  mod tidy #整理检查依赖,如果缺失包会下载或者引用的不需要的包会删除
* go mod vendor #复制依赖到vendor目录下面
* go mod 可看完整所有的命令

go mod虽好,但是费开发者的电脑磁盘,go mod拉下的包都会放 当前目录的pkg/mod目录下面, 意味着不同项目引用相同的包会重复下载,不像java的maven本地一个集中的目录,不重复下载。

更详细的说明可以看官方blog关于go mod的说明
https://blog.golang.org/using-go-modules


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

本文来自:简书

感谢作者:aside section ._1OhGeD

查看原文:说一说go mod

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

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