起因是,遇到一个问题:

经查阅资料,很可能跟包管理有关,之前有了解过忘了就再学一遍顺便解决问题。

学习资料:

所谓包管理,比如软件包管理,方便进行软件安装,升级,卸载等一些操作;

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 getGOPATH的关系;

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语言:包管理基础知识的更多相关文章

  1. Go语言包管理工具Glide

      Go语言包管理工具用于管理Go项目的库和库的依赖引用. 包管理工具普遍会在Go项目根目录生成Vendor文件夹并自动下载该Go项目需要的库. Go语言有很多开源的包管理工具,这里主要介绍Glide ...

  2. Go语言包管理工具dep

    什么是dep? dep和go,在一定程度上相当于maven之于Java,composer之于PHP,dep是go语言官方的一个包管理工具. 相比较go get而言,dep可以直接给引入的第三方包一个专 ...

  3. [Todo]各种语言包管理工具

    看到一篇文章不错: http://harttle.com/2015/05/29/pkg-manager.html 包管理和构建系统是现代的软件开发团队中必不可少的工具,也是Linux软件系统的常见组织 ...

  4. 5-24 c++语言之【基础知识】

    最近一段时间继续开始了c++的学习,作为c plus plus 难免会与c语言做一个对比,很明显的感受到c++语言注重代码的复用性和拓展性,而c语言更加注重其算法的高效性,这也是今后需要注意的地方,避 ...

  5. [转] linux操作系统下c语言编程入门--基础知识

    点击阅读原文 这篇文章介绍在LINUX下进行C语言编程所需要的基础知识.在这篇文章当中,我们将会学到以下内容: 1. 源程序编译        2. Makefile的编写        3. 程序库 ...

  6. Spring的事务管理基础知识

    1.数据库事务基础知识     1)数据库事务有严格的定义,它必须同时满足4个特性:原子性(Atomic).一致性(Consistency).隔离性(Isolation)和持久性(Durability ...

  7. c语言的一些基础知识

    c语言作为经典语言,这里不再多说了.咱从基础一起探讨吧! 一. 定义一个整型,如果作为局部变量,没有初始化的情况下,它是一个随机的值的,一般情况下输出会是0,但这个0是作为垃圾值的;而如果作为全局变量 ...

  8. C语言中的基础知识变量探讨

    C语言中的变量是编程的基础,主要有四个要素:存储类型.存储大小.存储名称和存储地址. 一.变量的要素: 1.存储类型:主要表明名变量存储的特征,主要有auto.extern.static和regist ...

  9. oracle管理基础知识

    1.oracle的安装 win下 linux下 2.内存和后台进程=实例 为何将oracle做的如此复杂呢 1.内存: --提高查询速度 --提升处理数据的速度 2.后台进程 --为了完成特定的服务, ...

随机推荐

  1. ss命令用来显示处于活动状态的套接字信息。

    ss命令用来显示处于活动状态的套接字信息.ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容.但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比net ...

  2. python开发环境软件包安装相关 failed with error code 1 in /tmp/pip-build-vn_f_e1n/psutil/

    指定源安装 pip install git+https://github.com/xxxxxx.git pip install -r requirements.txt -i https://mirro ...

  3. 为dokcer中最简版ubuntu(70M)增加apt安装能力

    如果要在docker中安装软件,除了直接找对应的软件镜像,一般我们会先安装Linux系统,然后再在里面安装各种需要的软件. 比如我想安装乌班图,直接下载官方的版本: 这个目前是Ubuntu20.04, ...

  4. JAVA日期Date格式转corn表达式

    date转corn 定时任务获取corn /*** * 日期转corn表达式 * @param date 日期 * @return */ public static String getCron(Da ...

  5. IDEA报错 Unable to open debugger port (127.0.0.1:63342): java.net.BindException "Address already in use

    Unable to open debugger port (127.0.0.1:63342): java.net.BindException  "Address already in use ...

  6. 【LeetCode】94. Binary Tree Inorder Traversal 解题报告(Python&C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 解题方法 递归 迭代 日期 题目地址:https://leetcode.c ...

  7. 【LeetCode】228. Summary Ranges 解题报告(Python)

    [LeetCode]228. Summary Ranges 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://leetcode.com/problems/sum ...

  8. UVA11754 - Code Feat

    Hooray!  Agent Bauer has shot the terrorists, blown upthe bad guy base, saved the hostages, exposed ...

  9. 问题--ImportError: DLL load failed: 找不到指定的模块

    今天在运行别人的项目时出现了问题: ImportError: DLL load failed: 找不到指定的模块. 解决方法: 卸载后重新安装. 详情参考: Python报错:ImportError: ...

  10. 【系统分析】《系统分析与设计方法》 Jeffrey L.Whitten 第1部分 系统开发环境 第3章 信息系统开发

    1.解释为什么对企业来说,拥有一个标准的系统开发过程很重要. 开发过程的成熟,使项目时间和费用减少,生产率和质量提高 2.如何关联系统生命周期和系统开发方法学? 系统生命周期包含系统开发阶段,其中使用 ...