title: "Go 1.11 Module"
date: 2018-10-26T23:50:56+08:00
draft: false
Go 1.11 Module 介绍
go 1.11 发布了一种新的模式来管理go程序的依赖库,这种方式不同于vendor
模型。
它主要提供下面几个重要特性:
- 更方便的脱离GOPATH来工作(我理解是,逐渐淡化GOPATH,GOPATH一度给入门golang的新人留下很多坑)
- 使用
$GOPATH/pkg/mod
来存储go mod
的缓存文件,提高go get
速度 - 可选的
$GOPROXY
和goproxy交互机制- 提供公司级或局域网级私有
go mod
服务器 - 为
golang.org/x/text
等老大难第三方依赖库提供缓存和提速
- 提供公司级或局域网级私有
启用 go mod
为启用go mod,需要配置GO111MODULE
环境变量:
GO111MODULE=off
无模块支持,go 会从$GOPATH
和vendor
文件夹寻找包。GO111MODULE=on
模块支持,go 会忽略$GOPATH
和vendor
文件夹,只根据go.mod
下载依赖。GO111MODULE=auto
在$GOPATH/src
外面且根目录有go.mod
文件时,开启模块支持。
go mod 对其它命令的影响
go get
- 如果强制启用 go mod, go get现在支持针对版本号去get指定项目。
go get
必须在一个启用了 go mod 的项目的根目录去执行,这样执行过go get
,将会自动改下本目录下的go.mod
文件。
go build
go build
会先检查当前目录中go.mod
记录的依赖,并检查$GOPATH/pkg/mod
中的缓存,如果没有,则会启动go get
流程。go build
可以强制提供一个参数go build -mod vendor
来使用vendor模式,而不是go mod自身在gopath中缓存的文件。
使用GOPROXY
此处有一个开源版本的 goproxy.io
和它的github主页 github.com/goproxyio
自建GOPROXY server
Athens is a Server for Your Go Packages
项目地址 https://github.com/gomods/athens
Athens可以用来在公司内部建立自己的私有go mod
服务器,
或者在公网建立一个对外公开的GOPROXY server
。
参考: