关于go module
从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.参考
How do I use vendoring with modules? Is vendoring going away?
关于go module的更多相关文章
- Android Studio 编译单个module
前期自己要把gradle环境变量配置好 在Terminal中gradle命令行编译apk 输入gradle assembleRelease 会编译全部module编译单个modulecd ./xiru ...
- ABP源码分析三:ABP Module
Abp是一种基于模块化设计的思想构建的.开发人员可以将自定义的功能以模块(module)的形式集成到ABP中.具体的功能都可以设计成一个单独的Module.Abp底层框架提供便捷的方法集成每个Modu ...
- nodejs模块中exports和module.exports的区别
通过Node.js的官方API可以看到Node.js本身提供了很多核心模块 http://nodejs.org/api/ ,这些核心模块被编译成二进制文件,可以require('模块名')去获取:核心 ...
- ES6之module
该博客原文地址:http://www.cnblogs.com/giggle/p/5572118.html 一.module概述 JavaScript一直没有模块体系,但是伴随着ES6的到来,modul ...
- [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 = ...
- Yii2.0.7 限制user module登录遇到的问题
在Yii2.0.6的时候我是在以下文件通过以下方法实现的. frontend/modules/user/Module.php namespace frontend\modules\user; clas ...
- Android Studio导入github下载的project和module
前言:我们以前eclispe时代, 经常都是跑到github浏览第三方开源资源,然后下载下来,运行一下sample之类的,学习没有接触的第三方安卓库,但是到了Android Studio,在githu ...
- Android Studio导入Project、Module的正确方法
Gradle Project项目.Module模块导入 最近看到网上很多人在抱怨,Android Studio很难导入github上下载下来的一些项目,主要包括: 1.导入就在下载Gradle2.根本 ...
- ImportError: No module named 'requests'
补充说明: 当前环境是在windows环境下 python版本是:python 3.4. 刚开始学习python,一边看书一边论坛里阅读感兴趣的代码, http://www.oschina.net/c ...
- android studio 中移除module和恢复module
一.移除Android Studio中module 在Android Studio中想要删除某个module时,在Android Studio中选中module,右键发现没有delete,如图: An ...
随机推荐
- briup_JDBC_自建工具类
1.操作的环境 STS,mysql,oracle orcle 所操作的数据库名为 ORCL 表为 m_stu 表结构如下 mysql 的表为:my_stu 表结构如下 工具类完整代码 package ...
- STM32写选项字节(option bytes)的正确姿势
STM32 的 Flash information block 部分,包含有特殊的选项字节,可以用于系统配置等信息, 其中还有两个有效字节(实际四个字节,两个是校验字节)的用户自定义数据字节. 在尝试 ...
- Maven 依赖的作用域
Maven的一个哲学是惯例优于配置(Convention Over Configuration), Maven默认的依赖配置项中,scope的默认值是compile,项目中经常傻傻的分不清,直接默认了 ...
- Hadoop_23_MapReduce倒排索引实现
1.1.倒排索引 根据属性的值来查找记录.这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址.由于不是由记录来确 定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(invert ...
- Protocol handler start failedCaused by: java.net.SocketException: Permission denied
最近在使用mac启动项目的时候,发现原本在Windows下正常跑的项目报错如下: Protocol handler start failedCaused by: java.net.SocketExce ...
- linux——目录说明
1) bin -> usr/bin : 这个目录存放最经常使用的命令 2) boot : 这个目录存放启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件 3) dev: de ...
- 题解 noip2019模拟赛Day1T3
题面 运河计划 问题描述 水运在人类的交通运输史中一直扮演着重要的角色.借助河流.的便利,人们得以把大量的货物输送到天南海北不仅仅是自然界现成的河流,人工开凿的运河(如苏伊士运河.巴拿马运河.我国的京 ...
- 【VS调试】VS调试的时候使用IP地址,局域网的设备可以访问并调试
使用IIS Express调试,只能通过 http://localhost:端口 进行访问 客户端的设备如何才能通过 http://ip地址:端口 访问后台程序进行调试呢? 第一步,打开项目属性, ...
- JavaScript数组的简单介绍
㈠对象分类 ⑴内建对象 ⑵宿主对象 ⑶自定义对象 ㈡数组(Array) ⑴简单介绍 ①数组也是一个对象 ②它和我们普通对象功能类似,也是用来存储一些值的 ③不同的是普通对象是使用字符串作为属性名的 ...
- App自动化-python基础
定义类:类变量.成员变量.局部变量:构造函数.类方法:实例化对象: # -*- coding: utf-8 -*- ''' Created on 2019-6-25 @author: adminstr ...