从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. ASE2019 model组 事后诸葛亮会议记录

    诸葛亮文档 设想和目标 1. 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 传统编程教育模式下,初学者(主要是刚刚接触编程的学生)往往依靠老师与助教的课堂教学,由 ...

  2. 【坑】Spring中抽象父类属性注入,子类调用父类方法使用父类注入属性

    运行环境 idea 2017.1.1 spring 3.2.9.RELEASE 需求背景 需要实现一个功能,该功能有2个场景A.B,大同小异 抽象一个抽象基类Base,实现了基本相同的方法BaseMe ...

  3. 008.MVC与数据库的交互

    使用ASP.NET MVC实现向数据库插入数据的步骤(程序): (删除,修改,查找)步骤1:创建数据库,创建要使用的表(数据) 表中可以事先插入测试数据步骤2:新建项目,写代码2.1)在配置文件中设置 ...

  4. python主要模块 和 常用方法简览

    ******************** PY核心模块方法 ******************** os模块: os.remove() 删除文件 os.unlink() 删除文件 os.rename ...

  5. 从后台数据库查询的List数据怎么在前台combobox显示

    后台直接从数据库,通过jdbcTemplate查询数据,得到List数据集,里面是Map List<Map<String, Object>> list =  jdbcTempl ...

  6. 用代理服务加快brew下载速度。方法:curl

    加快brew更新速度的方式:用代理 参考: https://www.zhihu.com/question/31360766常用的ss客户端都自带PAC模式的,比如ShadowsocksX-NG. 再次 ...

  7. 开源Asp.net CMS mojoPortal-源码运行

    1.下载mojoPortal源码 下载地址:http://mojoportal.codeplex.com/SourceControl/latest 我下载的版本是:2.4.0.9 MSSQL 以下是m ...

  8. SpringMVC防止重复提交

    作者:mylovepan 推荐:GOODDEEP 问题描述: 现在的网站在注册步骤中,由于后台要处理大量信息,造成响应变慢(测试机器性能差也是造成变慢的一个因素),在前端页面提交信息之前,等待后端响应 ...

  9. Delphi 实现Ping命令

    Delphi  实现Ping命令 unit FtPing; interface uses Windows, SysUtils, Classes, Controls, Winsock, StdCtrls ...

  10. 无法识别的配置节点 applicationSettings/* Properties.Settings 解决方法

    http://blog.csdn.net/yaoxtao/article/details/7766888 在项目中引用web service时,偶然出现 无法识别的配置节点 applicationSe ...