「go module」一文总结 go mod 入门使用
文章目录
- 什么是 Go Modules
- 为什么要使用 Modules
- 怎么使用
- 前置条件
- 项目初始化
- 如何安装/管理依赖?
- 依赖安装 go get
- 版本选择方式
- 替换版本 replace
- 间接依赖 && go mod tidy
- 远程代理
- 总结
什么是 Go Modules
Module 是 Go 的依赖管理工具。
核心概念
- Modules 模块
定义:简易来说,go.mod 文件所处的根目录即为模块,一个 modules 中包含了多个 package。 - Package 包
一个文件夹下的多个 go 文件构成了一个包,每个文件顶部都有 package xxx 的声明文件所属的包 - Version 版本
一个版本标识模块的一个不可变快照,每个版本以 v 开头。版本包括 主版本号、次版本号、补丁版本号等。
在 Go Modules 中,每次创建一个大版本,必须创建一个新的子目录。如 github.com/pelletier/go-toml/v2
为什么要使用 Modules
简单来说,go Modules 大势所趋。
从历史来说,在 Modules 之前,使用 vendor进行包管理。vendor 的管理方式非常简单, 将项目的所有依赖项复制到本项目的 vendor 目录下,需要时首先从 vendor 目录中寻找。
vendor 的缺点非常明显,当你将依赖下载到 vendor 目录下时,是无法指定版本的,而且你也很难感知到自己所下载的依赖版本。
Modules 提供的一个核心能力就是对依赖版本的管理。
怎么使用
前置条件
-
go 版本 >= 1.11
-
设置 GO111MODULE && go proxy
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct
开启 go111Module 之后,go 会在 modules 根目录下找依赖,而不会去 gopath 中找,当前默认值时auto。
项目初始化
go mod init 初始化一个模块,该命令生成一个 go mod 文件,管理依赖项。
如何安装/管理依赖?
依赖安装 go get
go get 命令下载、编译、安装,命令如下
go get dependenct@version
go get 会将依赖安装到 $gopath/pkg/mod,可以通过@指定版本号
同时,go get 还可以对依赖进行更新,命令如下
go get -u dependece
使用上述 go get 命令时,go modules 会自动更新 go.mod记录新的依赖项。
版本选择方式
安装依赖时,对版本的选择有多种方式:通配符匹配、比较运算符、精确版本。
- 通配符 ( * )
- 匹配任意数字或者字符,例如 v1.2.* 可以匹配任意版本
- 比较版本
- > 大于某版本
- >= 大于等于某版本
- < 小于某版本
- <= 小于等于某版本
- != 不等于某版本
- -:范围 v1.0-v1.3(包含边界)
- 精确版本
- 直接使用具体的版本号 v1.2.3
替换版本 replace
go mod repalce module replacement
将 module 替换为 replacement
go mod replace github.com/example/foo v1.2.3
更换版本
go mod replace github.com/example/bar …/some-local-module
更换为本地版本
使用 go mod replace 之后,需要使用 go mod tidy 更新 go mod go sum 文件。
一般是用于测试。其他场景避免使用
间接依赖 && go mod tidy
-
直接依赖:直接依赖是您在项目的
go.mod
文件的require
部分明确列出的依赖项。这些依赖项通常是您在代码中直接导入并使用的模块,它们是您项目直接依赖的模块。 -
非直接依赖:非直接依赖是其他模块的依赖项,也就是您项目的直接依赖项所依赖的模块。这些非直接依赖项不会在您项目的
go.mod
文件的require
部分中列出,而是在其他模块的require
部分中列出。
go mod tidy
命令是 Go Modules 中的一个命令,用于维护和更新项目的 go.mod
和 go.sum
文件,以保持依赖项的一致性和正确性。
在执行 go mod tidy
命令时,Go 编译器会增加缺失的依赖、删除未使用的直接依赖项、更新直接依赖项的版本、更新 go.sum
文件
远程代理
Go Modules 支持使用远程代理来加速模块的下载和构建过程,简单来说无法直接访问 Go 官网时通过代理进行下载。具体命令
go env -w GOPROXY=https://goproxy.cn,direct
配置完成后,通过 go get
、go mod tidy
时,首先使用代理网站下载更新依赖。
总结
我对 Go Modules 的理解,通过 Modules 实现了对依赖的版本控制,所有的依赖默认下载在 $GoPath/pkg/mod 下,Modules 通过 go.mod 文件指明当前项目所使用的依赖及其具体版本。
相关文章:
「go module」一文总结 go mod 入门使用
文章目录 什么是 Go Modules为什么要使用 Modules怎么使用前置条件项目初始化如何安装/管理依赖?依赖安装 go get版本选择方式 替换版本 replace间接依赖 && go mod tidy远程代理 总结 什么是 Go Modules Module 是 Go 的依赖管理工具。 核心概念 Module…...
48. 旋转图像 --力扣 --JAVA
题目 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 解题思路 顺时针旋转90度 上下翻转 对角线翻转;两次两层循环…...
Java中的jvm——面试题+答案(Java虚拟机更深层次的概念和原理,包括字节码、代理、内存管理、并发等)——第17期
什么是即时编译(JIT Compilation)? 答案: 即时编译是一种在运行时将字节码转换为本地机器代码的技术,以提高程序的执行速度。JVM中的JIT编译器负责执行这个过程。 什么是Java字节码?为什么Java使用字节码…...

docker打包前端镜像
文章目录 一、构建镜像二、查看本地镜像三、启动容器四、查看启动的容器五、保存镜像六、读取镜像七、创建镜像八、最后 docker官网 一、构建镜像 -t是给镜像命名,.(点)是基于当前目录的Dockerfile来构建镜像 docker build -t image_web .二、查看本地镜像 docke…...

深入理解数据结构:链表
文章目录 🌰导语🌰链表的定义及基本结构🌰单链表🥕单链表特点 🌰双向链表🥕双链表特点 🌰循环链表🥕循环链表特点 🌰链表的操作🍆链表的插入🫘链头…...
7:kotlin 数组 (Arrays)
数组是一种数据结构,它保存固定数量的相同类型或其子类型的值。kotlin中最常见的数组类型是对象类型数组,数组由array类表示。 什么时候使用 当你在kotlin中有特殊的底层需求需要满足时,可以使用数组。例如,如果你有超出常规应用…...

mysql 变量和配置详解
MySQL 中还有一些特殊的全局变量,如 log_bin、tmpdir、version、datadir,在 MySQL 服务实例运行期间它们的值不能动态修改,也就是不能使用 SET 命令进行重新设置,这种变量称为静态变量。数据库管理员可以使用前面提到的修改源代码…...

算法基础之合并集合
合并集合 核心思想:并查集: 1.将两个集合合并2.询问两个元素是否在一个集合当中 基本原理:每个集合用一棵树表示 树根的编号就是整个集合的编号 每个节点存储其父节点,p[x]表示x的父节点 #include<iostream>using namespace std;const int N100010;int p[N];…...
在使用微信或者支付宝支付的时候,为什么微信支付或者支付宝支付的异步通知商户支付结果要进行验签?
在使用微信支付或支付宝支付等第三方支付平台时,异步通知是一种常见的机制,用于通知商户支付结果或交易状态的变化。验签(Signature Verification)是为了确保异步通知的安全性和完整性而进行的重要步骤。以下是为什么要进行验签的…...
带你用uniapp从零开发一个仿小米商场_5. 公共样式编写,
先前引入了公共样式,但公共样式文件里面还没有编写内容 在这里我将一一讲解公共样式内应该有什么样式,和为什么 首先给page添加高度和背景色,当然这个背景色可以在app.vue内添加 page{/* 设置page高,让每个页面的最小高度为整个视窗的高 */min-height: 100vh; /* 统一字体大小…...

2019年全国硕士研究生入学统一考试管理类专业学位联考英语(二)试题
文章目录 2019年考研英语二真题SectionⅠ Use of EnglishSection II Reading ComprehensionText 121——细节信息题22——细节信息题23——细节信息题24——细节信息题25——词义题 Text 226——细节信息题27——细节信息题28——细节信息题29——细节信息题30——态度题 Text …...

基于C#实现Kruskal算法
这篇我们看看第二种生成树的 Kruskal 算法,这个算法的魅力在于我们可以打一下算法和数据结构的组合拳,很有意思的。 一、思想 若存在 M{0,1,2,3,4,5}这样 6 个节点,我们知道 Prim 算法构建生成树是从”顶点”这个角度来思考的,然…...

卷积神经网络经典backbone
特征提取是数据分析和机器学习中的基本概念,是将原始数据转换为更适合分析或建模的格式过程中的关键步骤。特征,也称为变量或属性,是我们用来进行预测、对对象进行分类或从数据中获取见解的数据点的特定特征或属性。 1.AlexNet paper&#…...
【2023 年终盘点】今年用的最多的 10 款浏览器插件
分享顺哥今年用的最多的 10 款浏览器插件。 排名不分先后,涉及各个方面的应用。 大家有好用的插件也欢迎在评论区留言分享! 视频 YouTube:https://youtu.be/ZpTydUSBwCA 顺哥博客 浏览器扩展篇 注意: 1、以下介绍的均为在 Google Chrome 浏览器适用的小插件,部分插件…...

GWAS:plink进行meta分析
之前教程提到过Metal是可以做Meta分析,除了Metal,PLINK也可以进行Meta分析。 命令如下所示: plink --meta-analysis gwas1.plink gwas2.plink gwas3.plink logscale qt --meta-analysis-snp-field SNP --meta-analysis-chr-field CHR --me…...

web:[WUSTCTF2020]朴实无华
题目 点开页面显示如下 页面显示了一行报错:Cannot modify header information - headers already sent by (output started at /var/www/html/index.php:3) in /var/www/html/index.php on line 4 意思为不能修改报头信息-报头已经发送(输出开始于/var/www/html/i…...
云原生安全工具汇总(docker、k8s、Kubernetes、Git仓库)
目录 Metarget:云原生靶机环境 CDK:容器环境定制的渗透测试工具 container-escape-check:容器逃逸检测...

基于51单片机超声波测距汽车避障系统
**单片机设计介绍, 基于51单片机超声波测距汽车避障系统 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于51单片机的超声波测距汽车避障系统是一种用于帮助汽车避免碰撞和发生事故的设备,以下是一个基本…...

git的使用:本地git下载、sshkey的添加、github仓库创建及文件上传
一、github创建账号 即github注册账号,登录github官网,根据提示注册即可 github官网 二、git客户端下载安装 已有很多git下载安装的博文了,在此就不赘述 三、sshkey的生成与添加 1、sshkey的生成以及查看 // sshkey的生成命令ÿ…...

增量有余、后劲不足,星途汽车10月份销量环比下降3.9%
撰稿|行星 来源|贝多财经 近日,奇瑞集团发布了10月销量月报。报告显示,奇瑞集团于2023年10月销售汽车20.03万辆,同比增长50.8%,单月销量首次突破20万辆;2023年前10个月的累计销量为145.36辆,同比增长41.6…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...

大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...

Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...

C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
uniapp 实现腾讯云IM群文件上传下载功能
UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中,群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS,在uniapp中实现: 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...
数据库正常,但后端收不到数据原因及解决
从代码和日志来看,后端SQL查询确实返回了数据,但最终user对象却为null。这表明查询结果没有正确映射到User对象上。 在前后端分离,并且ai辅助开发的时候,很容易出现前后端变量名不一致情况,还不报错,只是单…...