Go 1.11 Module 介绍


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 会从 $GOPATHvendor 文件夹寻找包。
  • GO111MODULE=on 模块支持,go 会忽略 $GOPATHvendor 文件夹,只根据 go.mod 下载依赖。
  • GO111MODULE=auto$GOPATH/src 外面且根目录有 go.mod 文件时,开启模块支持。

go mod 对其它命令的影响

  1. go get
    1. 如果强制启用 go mod, go get现在支持针对版本号去get指定项目。
    2. go get必须在一个启用了 go mod 的项目的根目录去执行,这样执行过go get,将会自动改下本目录下的go.mod文件。
  2. go build
    1. go build 会先检查当前目录中go.mod记录的依赖,并检查$GOPATH/pkg/mod中的缓存,如果没有,则会启动go get流程。
    2. 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

参考:

原文地址:https://www.cnblogs.com/morya/p/9859420.html