Go语言:包管理基础知识
起因是,遇到一个问题:

经查阅资料,很可能跟包管理有关,之前有了解过忘了就再学一遍顺便解决问题。
学习资料:
所谓包管理,比如软件包管理,方便进行软件安装,升级,卸载等一些操作;
Go语言程序中经常会引入其他的package来使用;
Go语言刚开始是并没有包管理相关功能,实现import <packages>时:
- 我理解是:早期需要啥包,就手动go get什么。
go get命令:会根据路径,把相应的模块获取并保存在$GOPATH/src。
Go Modules
Go 1.11 引入Go Modules后:
GO111MODULE = off:强制使用GOPATH 方式;GO111MODULE = on:强制使用Go Modules;GO111MODULE = auto:- 当存在 go.mod 文件时或处于 GOPATH 外, 相当于 GO111MODULE=on。
- 相当于 Go 1.13 下你可以将所有的代码仓库均不存储在 GOPATH 下。
- 当项目目录处于 $GOPATH 内,且没有 go.mod 文件存在时,相当于 GO111MODULE=off。
- 使用
Go Modules时,在go build期间使用的包存储在$GOPATH/pkg/mod中(而不是GOPATH的$GOPATH/src中)。 - 执行
go run xxx.go运行代码会发现go mod会自动查找依赖自动下载。
到这以后,会考虑到go.mod这个从哪里来,是自己手动创建么?接着学习go mod;
go mod命令
Go mod命令是实现Go Modules的工具;就相当于go get和GOPATH的关系;
go mod 命令参数:

图片来源:go mod使用 - 简书 (jianshu.com);常用的是
init,tidy,edit
初始化一个项目;
go mod init xxx
xxx与package名字无关;只是给当前项目用的模块(modules)一个名字;
go.mod文件一旦创建后,它的内容将会被go toolchain全面掌控。go toolchain会在各类命令执行时,比如go get、go build、go mod等修改和维护go.mod文件。
同时还生成了
go.sum其中包含软件包的哈希值,以确保我们具有正确的版本和文件。
go.mod 提供了module, require、replace和exclude 四个go.mod内的关键字:
module语句指定包的名字(路径)require语句指定的依赖项模块replace语句可以替换依赖项模块exclude语句可以忽略依赖项模块
解决问题
1 确认GO111MODULE=on:确认了无数次,不仅zsh里配置了,bash里面也配置了;
但用go list是,依旧出现了如下报错,配置的GO111MOUDLE=on未生效。

go env -w GO111MODULE=on
这样之后就好了。
所以我就有一个疑问了,为什么bash配置文件中添加的GO111MODULE=on 没生效?
macos,我只用zsh,zshrc中添加了,也source了;甚至bash_profile,profile也都添加了;为什么go env中还需要再设置一遍?很奇怪!
Go语言:包管理基础知识的更多相关文章
- Go语言包管理工具Glide
Go语言包管理工具用于管理Go项目的库和库的依赖引用. 包管理工具普遍会在Go项目根目录生成Vendor文件夹并自动下载该Go项目需要的库. Go语言有很多开源的包管理工具,这里主要介绍Glide ...
- Go语言包管理工具dep
什么是dep? dep和go,在一定程度上相当于maven之于Java,composer之于PHP,dep是go语言官方的一个包管理工具. 相比较go get而言,dep可以直接给引入的第三方包一个专 ...
- [Todo]各种语言包管理工具
看到一篇文章不错: http://harttle.com/2015/05/29/pkg-manager.html 包管理和构建系统是现代的软件开发团队中必不可少的工具,也是Linux软件系统的常见组织 ...
- 5-24 c++语言之【基础知识】
最近一段时间继续开始了c++的学习,作为c plus plus 难免会与c语言做一个对比,很明显的感受到c++语言注重代码的复用性和拓展性,而c语言更加注重其算法的高效性,这也是今后需要注意的地方,避 ...
- [转] linux操作系统下c语言编程入门--基础知识
点击阅读原文 这篇文章介绍在LINUX下进行C语言编程所需要的基础知识.在这篇文章当中,我们将会学到以下内容: 1. 源程序编译 2. Makefile的编写 3. 程序库 ...
- Spring的事务管理基础知识
1.数据库事务基础知识 1)数据库事务有严格的定义,它必须同时满足4个特性:原子性(Atomic).一致性(Consistency).隔离性(Isolation)和持久性(Durability ...
- c语言的一些基础知识
c语言作为经典语言,这里不再多说了.咱从基础一起探讨吧! 一. 定义一个整型,如果作为局部变量,没有初始化的情况下,它是一个随机的值的,一般情况下输出会是0,但这个0是作为垃圾值的;而如果作为全局变量 ...
- C语言中的基础知识变量探讨
C语言中的变量是编程的基础,主要有四个要素:存储类型.存储大小.存储名称和存储地址. 一.变量的要素: 1.存储类型:主要表明名变量存储的特征,主要有auto.extern.static和regist ...
- oracle管理基础知识
1.oracle的安装 win下 linux下 2.内存和后台进程=实例 为何将oracle做的如此复杂呢 1.内存: --提高查询速度 --提升处理数据的速度 2.后台进程 --为了完成特定的服务, ...
随机推荐
- ligerui有时候竖直的线没对齐,是因为某一列的内容太长,此刻可以调整一下此列的宽度为适当的值便可消除此现象
ligerui有时候竖直的线没对齐,是因为某一列的内容太长,此刻可以调整一下此列的宽度为适当的值便可消除此现象
- JAVA将Object对象转byte数组
/** * 将Object对象转byte数组 * @param obj byte数组的object对象 * @return */ public static byte[] toByteArray(Ob ...
- nim_duilib之virtualListbox用法(22)
概述 本文将介绍virtualListbox的用法. 更多请参考源码. 一个样式 样式丑了点,勿喷. 重写函数 使用virtualListbox, 需要一个派生类(继承自基类VirtualListIn ...
- c++设计模式概述之适配器
类写的不规范(应该屏蔽类的拷贝构造函数和运算符=).少写点代码,缩短篇幅,重在理解. 实际中可不要这样做. 类比生活中的手机,pad等电源适配器. 简单来讲: 将原本 不匹配 的两者 变的匹配 ...
- elementUI表单嵌套表格并对每行进行校验
elementUI表单嵌套表格并对每行进行校验 elementUI 表单嵌套表格并进行校验. 目录 效果展示 代码链接 关键代码 完整代码 效果展示 先看看这是不是需要的效果^_^ 如图,Elem ...
- G2022 次列车即将进站,前端人请抓紧时间上车
前端发展百花放,一技未熟百技出.未知何处去下手,关注小编胜百书. 我是前端人,关注小编,分享更多前端相关知识! 平安夜一个人?圣诞一个人? 跨年还是一个人吗? 没事,关注小编,每个节日让小编陪你一起度 ...
- CS5210|低成本HDMI转VGA方案|CS5210参数说明
Capstone最新推出的一款HDMI转VGA音视频转接线或者转换器方案芯片CS5210. 其设计的优势在于内置晶振,外围电路器件较少设计简单,芯片封装集成度较高,方案BOM成本低,相比其他方案产品更 ...
- Java Web程序设计笔记 • 【第6章 Servlet技术进阶】
全部章节 >>>> 本章目录 6.1 应用 Servlet API(一) 6.1.1 Servlet 类的层次结构 6.1.2 使用 Servlet API 的原则 6.1 ...
- 使用 history 对象和 location 对象中的属性和方法制作一个简易的网页浏览工具
查看本章节 查看作业目录 需求说明: 使用 history 对象和 location 对象中的属性和方法制作一个简易的网页浏览工具 实现思路: 使用history对象中的 forward() 方法和 ...
- Log4j2完整XML参考(详细注释说明)
1.说明 本文提供完整的log4j2.xml配置文件, 供开发中参考使用,可以作为模板, 配置对应实现如下常用的功能: 1.自动检测和重新加载配置,每10分钟(600s)检测一次 2.每个日志文件最大 ...