从Go 1.11开始引入module,用于版本管理。

通过使用module,工程目录的位置不用必须放在GOPATH下。

当前版本是1.13,下文中将以Go1.13为例介绍module。

在Go 1.13中,继续使用临时环境变量GO111MODULE来设置是否使用module。

1.关于GO111MODULE

GO111MODULE 可设置为off, on, 或auto (默认)。

1.1 GO111MODULE=on

如果GO111MODULE=on, go command 将使用modules查找依赖包,不再使用GOPATH。一般称为"module-aware mode"。
在module-aware mode下,GOPATH 是无意义的,不过它还是会把下载的依赖包存储在 $GOPATH/pkg/mod 中,也会把 go install 的结果放在 $GOPATH/bin 中(如果GOBIN没有设置)。

使用module的情况下,执行go commands(go build, go test ....等),自动添加依赖到go.mod中。

1.2 GO111MODULE=off

如果 GO111MODULE=off,go command不再使用module查找依赖包,而是在vendor目录和GOPATH查找依赖包。一般称为"GOPATH mode."

1.3 GO111MODULE=auto 或没有设置

如果 GO111MODULE=auto 或没有设置, go command是否使用module取决于是否存在go.mod文件。
如果当前目录,或父目录中存在go.mod文件,那么go command就会使用module,否则不会使用module。

特别说明下,
在Go 1.13中,如果GO111MODULE=auto或没有设置,并且只要有 go.mod 文件,就会使用module, 甚至即使在GOPATH下,也一样。
Go 1.13以前, 如果在GOPATH下,即使GO111MODULE=auto或没有设置,也无法使用module。

2.Modules 与 vendoring

当使用modules的时候,go command 会自动下载依赖包(存放路径GOPATH/pkg/mod),并会完全忽略vendor目录。

为了与老版本的Go兼容,或者想把所有的依赖包放在一个目录下,go语言提供了 'go mod vendor' 。
使用 'go mod vendor' ,可以在主module下的根目录下创建一个名为'vendor'目录,里面存放所有的go build、go test使用的依赖包。

编译时,使用'go build -mod=vendor',这样就会使用vendor目录的依赖包,而不再使用网络和本地缓存。
这里vendor目录必须是主module的顶级vendor目录,其他位置的vendor目录会被忽略。

3.参考

Module support

Modules

How do I use vendoring with modules? Is vendoring going away?

关于go module的更多相关文章

  1. Android Studio 编译单个module

    前期自己要把gradle环境变量配置好 在Terminal中gradle命令行编译apk 输入gradle assembleRelease 会编译全部module编译单个modulecd ./xiru ...

  2. ABP源码分析三:ABP Module

    Abp是一种基于模块化设计的思想构建的.开发人员可以将自定义的功能以模块(module)的形式集成到ABP中.具体的功能都可以设计成一个单独的Module.Abp底层框架提供便捷的方法集成每个Modu ...

  3. nodejs模块中exports和module.exports的区别

    通过Node.js的官方API可以看到Node.js本身提供了很多核心模块 http://nodejs.org/api/ ,这些核心模块被编译成二进制文件,可以require('模块名')去获取:核心 ...

  4. ES6之module

    该博客原文地址:http://www.cnblogs.com/giggle/p/5572118.html 一.module概述 JavaScript一直没有模块体系,但是伴随着ES6的到来,modul ...

  5. [python] CSV read and write using module xlrd and xlwt

    1. get data from csv, skip header of the file. with open('test_data.csv','rb,) as csvfile: readCSV = ...

  6. Yii2.0.7 限制user module登录遇到的问题

    在Yii2.0.6的时候我是在以下文件通过以下方法实现的. frontend/modules/user/Module.php namespace frontend\modules\user; clas ...

  7. Android Studio导入github下载的project和module

    前言:我们以前eclispe时代, 经常都是跑到github浏览第三方开源资源,然后下载下来,运行一下sample之类的,学习没有接触的第三方安卓库,但是到了Android Studio,在githu ...

  8. Android Studio导入Project、Module的正确方法

    Gradle Project项目.Module模块导入 最近看到网上很多人在抱怨,Android Studio很难导入github上下载下来的一些项目,主要包括: 1.导入就在下载Gradle2.根本 ...

  9. ImportError: No module named 'requests'

    补充说明: 当前环境是在windows环境下 python版本是:python 3.4. 刚开始学习python,一边看书一边论坛里阅读感兴趣的代码, http://www.oschina.net/c ...

  10. android studio 中移除module和恢复module

    一.移除Android Studio中module 在Android Studio中想要删除某个module时,在Android Studio中选中module,右键发现没有delete,如图: An ...

随机推荐

  1. WPF - 仿QQ2014

    声明:非原创.项目是网上发现的,以学习为目的重写了部分代码,合理地调整了下布局,巧妙地简化了下Style样式.重写还算是有价值的,并非完全复制. 效果: 获取项目源码:https://pan.baid ...

  2. 注意条件表达式规范[JLS 15.25]

    /** * 猜猜输出结果是什么 */ public class appalet { public static void main(String[] args) { char x = 'x'; int ...

  3. linux——命令2—删除—查看—搜索

    多种查看命令: 多种搜索命令: ll命令 -rw-rw-rw  - 表示文件 drw-rw-rw  d 表示目录文件夹 ========================== 使用rm删除文件 例如:r ...

  4. 接口自动化平台——httprunnermanager

    Windows 环境搭建 1. 下载安装pip install httprunner==1.4.2hrun -V #1.4.2har2case -V #0.1.8 2. httprunnermanag ...

  5. SqlMetaData异常 dbType xx 对于此构造函数无效。

    今天在dapper中想扩展使用表值类型参数——tableValue.但是dapper不支持此类参数,于是扩展了一下.其中出现了一个问题. Microsoft.SqlServer.Server.SqlM ...

  6. JavaScript 基础知识梳理——事件

    事件 1)事件是文档或浏览器窗口中发生的特定的交互瞬间. JavaScript和HTML之间的交互是通过事件实现的. 2)事件流——描述的是从页面中接受事件的顺序 IE——事件冒泡流 Netscape ...

  7. linux基础_用户和组的三个文件

    1./etc/passwd文件 用户(user)的配置文件,记录用户的各种信息 每行的含义:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录shell 2./etc/shadow文件 口令 ...

  8. loj2587 「APIO2018」铁人两项[圆方树+树形DP]

    主要卡在一个结论上..关于点双有一个常用结论,也经常作为在圆方树/简单路径上的良好性质,对于任意点双内互不相同的三点$s,c,t$,都存在简单路径$s\to c\to t$,证明不会.可以参见clz博 ...

  9. initramfs机制

    1.什么是 Initramfs 在2.6版本的linux内核中,都包含一个压缩过的cpio格式的打包文件.当内核启动时,会从这个打包文件中导出文件到内核的rootfs文件系统,然后内核检查rootfs ...

  10. nginx限流&健康检查

    Nginx原生限流模块: ngx_http_limit_conn_module模块 根据前端请求域名或ip生成一个key,对于每个key对应的网络连接数进行限制. 配置如下: http模块   ser ...