当前位置: 首页 > news >正文

GoModule

GOPATH
最早的就是GOPATH构建模式,
go get下载的包都在path中的src目录下
src目录是源代码存放目录。

package mainimport ("net/http""github.com/gorilla/mux"
)func main() {r := mux.NewRouter()r.HandleFunc("/hello", func(w http.ResponseWriter, r *http.Request) {w.Write([]byte("Hello, world!"))}).Methods("GET")http.ListenAndServe(":8080", r)
}

上面的例子中,因为还没有下载github这个,所以导致报错,
因为从我们默认的GOPATH下找不到这个依赖的包,所以编译失败。
但是go get就可以下载依赖包,但是此时下载是最新的,如果后续更新引入了不兼容代码,那么将会无法编译成功。

Go Vendor

Go Module
第一步,使用go mod int创建go.mod文件,将当前项目变成一个Go Module;

第二步,通过 go mod tidy 命令自动更新当前第三方依赖

第三步,执行go build编译,构建可执行程序

module testgo 1.23.0require github.com/gorilla/mux v1.8.1 // indirect

刚才的go get一下github地址,就可以自动更新go module到go.mod

效果:
在这里插入图片描述
在go.mod文件中,我们看到require中依赖的版本号是v1.8.1。
其实,在Go Module模式下,语义版本号主要由三部分组成,
主版本号(major)、次版本号(minor)和补丁版本号(patch),
例如上面的版本号v1.8.1,

主版本号就是1, 次版本号就是8, 补丁版本号就是1。

主版本号不同的两个版本是相互不兼容的,
而且在主版本号相同的情况下,
次版本号大都是向前兼容次版本号小的版本的,
补丁版本也不影响兼容性。

所以:如果某一天mux包发布了v2.0.0版本,那么这时候主版本就是2,已经与v1.8.1和v1.7.1的主版本号不同了,那么v2.0.0与v1.8.1和v1.7.1就是不兼容的包版本。

Go Module常见操作
1.添加第三方依赖包:
为了操作redis,发送kafka消息等等需要导入第三方依赖包。

package mainimport ("net/http""github.com/google/uuid""github.com/gorilla/mux"
)func main() {r := mux.NewRouter()r.HandleFunc("/hello", func(w http.ResponseWriter, r *http.Request) {w.Write([]byte(uuid.NewString()))}).Methods("GET")http.ListenAndServe(":8080", r)
}

上述代码中,我们还没有下载uuid这个包
所以我们要go get一下这个包,如下所示。(也可以go mod tidy,而且go mod tidy效率更加高)
在这里插入图片描述2.升降级第三方依赖包:
在项目开发中,如果升级了某个包的版本且新版本的包存在一些问题,比如对服务的整体性能产生了影响,我们可以手动的将它降级为之前发布的某个兼容版本。

go list -m -versions github.com/google/uuid//查看包有哪些版本

降级的话:

go get github.com/google/uuid@v1.5.0

在这里插入图片描述降级成功如上图所示。
除了用go get来降级,也可以用go mod tidy来降级依赖包
但是首先要使用go mod edit明确告知依赖的版本

$ go mod edit -require=github.com/google/uuid@v1.4.0
$ go mod tidy

移除第三方依赖包
直接使用go mod tidy自动分析不需要的就可以直接移除。

面试题:

你知道Go构建模式演进过程吗?
说下GOPATH的构建原理?说下GO Vendor的构建原理?
GOPATH有什么缺点?Go Module有什么缺点?
如果导入的第三方依赖包版本不兼容该怎么处理?
Go最小依赖版本选择你知道吗?说下原理?
你觉得当前的Go Module构建模式有什么缺点?该如何改进?

相关文章:

GoModule

GOPATH 最早的就是GOPATH构建模式, go get下载的包都在path中的src目录下 src目录是源代码存放目录。 package mainimport ("net/http""github.com/gorilla/mux" )func main() {r : mux.NewRouter()r.HandleFunc("/hello", func(w h…...

SQL - 数据库管理

保障数据库安全的用户账户和权限问题,当在工作环境中使用MySQL的时候,我们需要创建其他用户账户,并赋予它们特定权限。创建一个用户 create user wolf127.0.0.1 identified by 1234; create user wolf127.0.0.1 identified by 1234;-- 无 …...

密码学之AES算法

文章目录 1. AES简介1.1 AES算法的历史背景1.2 AES算法的应用领域 2. AES加解密流程图2. AES算法原理2.1 AES加密过程2.2 AES解密过程 1. AES简介 1.1 AES算法的历史背景 AES算法,全称为Advanced Encryption Standard(高级加密标准)&#x…...

GitHub每日最火火火项目(8.20)

项目名称:goauthentik / authentik 项目介绍:authentik 是一款提供认证功能的工具,它就像是一个强大的粘合剂,能够满足您在认证方面的各种需求。无论是在安全验证、用户身份管理还是访问控制等方面,它都能发挥重要作用…...

(五)Flink Sink 数据输出

经过上面的 Transformation 操作之后,最终形成用户所需要的结果数据集。通常情况下,用户希望将结果数据输出到外部存储介质或者传输到下游的消息中间件中,在 Flink 中,将 DataStream 数据输出到外部系统的过程被定义为 Sink 操作。 目录 (一)基本数据输出 (二)第三方…...

Spring 注入、注解及相关概念补充

一、Spring DI 的理解 DI ( Dependency Inject,中文释义:依赖注入)是对 IOC 概念不同角度的描述,是指应用程序在运行时,每一个 bean 对象都依赖 IOC 容器注入到当前 bean 对象所需要的另一个 bean 对象。(例如&#xf…...

【Linux多线程】线程安全的单例模式

文章目录 1. 单例模式 与 设计模式1.1 单例模式1.2 设计模式1.3 饿汉实现模式 与 懒汉实现模式1.4 饿汉模式① 饿汉模式的特点② 饿汉式单例模式的实现③ 饿汉式单例模式的优缺点④ 适用场景 1.5 懒汉模式① 懒汉式单例模式的特点② 懒汉式单例模式的实现③ 懒汉式单例模式的优…...

基于jqury和canvas画板技术五子棋游戏设计与实现(论文+源码)_kaic

摘 要 网络五子棋游戏如今面临着一些新的挑战和机遇。一方面,网络游戏需要考虑到网络延迟和带宽等因素,保证游戏的实时性和稳定性。另一方面,网络游戏需要考虑到游戏的可玩性和趣味性,以吸引更多的玩家参与。本文基于HTML5和Canv…...

指针 (四)

一 . 指针的使用和传值调用 (1)strlen 的模拟实现 库函数 strlen 的功能是求字符串长度,统计的是字符串中 \0 之前的字符个数,函数原格式如下: 我们的参数 str 接收到一个字符串的起始地址,然后开始统计…...

便利店(超市)管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图详细视频演示技术栈系统测试为什么选择我官方认证玩家,服务很多代码文档,百分百好评,战绩可查!!入职于互联网大厂,可以交流,共同进步。有保障的售后 代码参考数据库参…...

Excel中的“块”操作

在Excel中,有offset、index、indirect三个对“区域”操作的函数,是较高版本Excel中“块”操作的利器。 (笔记模板由python脚本于2024年08月20日 19:25:21创建,本篇笔记适合喜欢用Excel处理数据的coder翻阅) 【学习的细节是欢悦的历程】 Pytho…...

yolo V8训练 长条状目标

1、说明 目标数据集合中有很多长条状图片&#xff0c;如果直接Resize 会严重拉伸&#xff0c;因此采用把长条图像裁剪成2段&#xff0c;然后将裁剪后的2段图片拼接在一起。 2、代码 2.1 C 代码 &#xff08;部署&#xff0c;模型推理时C &#xff09; #include <stdio.h…...

数据结构与算法 - 设计

1. LRU缓存 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类&#xff1a; LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中&#xff0c;则返回关键字的值&#xff0…...

62 网络设备的暗藏的操控者SNMP

一 SNMP 简介 SNMP(Simple Network Management Protocol,简单网络管理协议)广泛用于网络设备的远程管理和操作。SNMP允许管理员通过NMS对网络上不同厂商、不同物理特性、采用不同互联技术的设备进行管理,包括状态监控、数据采集和故障处理。 二 SNMP 网络架构 NMS(Netwo…...

华硕飞行堡垒键盘全部失灵【除电源键】

华硕飞行堡垒FX53VD键盘全部失灵【除电源键】 前言一、故障排查二、发现问题三、使用方法总结 前言 版本型号&#xff1a; 型号 ASUS FX53VD&#xff08;华硕-飞行堡垒&#xff09; 板号&#xff1a;GL553VD 故障情况描述&#xff1a; 键盘无法使用&#xff0c;键盘除开机键外…...

前端字符串将其分割成长度为 32 的子字符串数组

技巧分享&#xff1a;将字符串切割后&#xff0c;对list数据进行数据处理 要实现这个需求&#xff0c;可以编写一个简单的 JavaScript 函数来处理字符串并将其分割成长度为 32 的子字符串数组。下面是一个具体的实现示例&#xff1a; function splitStringIntoChunks(str) {l…...

小学二年级数学精选试题

小学二年级数学精选试题...

练习题 - 探索正则表达式re功能

在编程的世界里,正则表达式(Regular Expression, 简称re)是一种强大的工具,它能帮助我们有效地处理文本数据。从简单的查找到复杂的字符串操作,正则表达式都能轻松应对。特别是在数据清理、文本分析以及自动化处理等场景中,正则表达式更是不可或缺的利器。本篇文章将深入…...

【Oracle 11G 配置使用教程1】

Oracle11G配置使用教程1 引言图像方式创建数据库一、打开 Database Configuration Assistant二、创建数据库操作三、选择数据库模版四、配置数据库标识五、配置数据库标识六、创建数据库 配置监听一、打开创建监听程序二、打开创建监听程序三、重新配置监听程序四、选择监听程序…...

【ubuntu24.04】docker pull 配置

Docker 镜像加速器 的方式,看起来不行。阿里云的要先登录。手动拉取tar包的方式,官方dockerhub看起来本身没提供。docker pull 的 代理与 环境变量的代理不同因此,docker pull gitlab/gitlab-ce:17.3.0-ce.0 使用了全局代理也会失败参考官方文档: Use a proxy server with …...

绿色软件制作:TranslucentTB便携版开发全攻略

绿色软件制作&#xff1a;TranslucentTB便携版开发全攻略 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 在Windows个性化定制领域&#…...

NHPZ-10A/10B/10C 型平板式制动检验台全场景实战指南

全工况制动安全闭环&#xff1a;NHPZ-10A/10B/10C 型平板式制动检验台全场景实战指南在机动车安全性能检测体系中&#xff0c;平板式制动检验台是评估车辆制动系统可靠性的核心设备&#xff0c;其检测结果直接决定车辆能否安全上路。传统平板制动检测普遍存在工况模拟失真、数据…...

Windows DLL注入工具Xenos深度技术解析与实践指南

Windows DLL注入工具Xenos深度技术解析与实践指南 【免费下载链接】Xenos Windows dll injector 项目地址: https://gitcode.com/gh_mirrors/xe/Xenos 一、技术内核&#xff1a;Xenos注入引擎的架构解析 1.1 注入技术的三级引擎架构 Xenos作为一款专业的Windows DLL注…...

高效构建个性化Obsidian知识管理系统:从模板到实践的全面指南

高效构建个性化Obsidian知识管理系统&#xff1a;从模板到实践的全面指南 【免费下载链接】kepano-obsidian My personal Obsidian vault template. A bottom-up approach to note-taking and organizing things I am interested in. 项目地址: https://gitcode.com/gh_mirro…...

用ESP32和2.13寸电子价签墨水屏,DIY一个超省电的桌面网络时钟(附完整代码)

用ESP32和2.13寸电子价签墨水屏打造极简网络时钟&#xff1a;从硬件拆解到代码实战 在智能设备泛滥的今天&#xff0c;一块能安静显示时间且不打扰生活的时钟反而成了稀罕物。本文将带你用ESP32开发板和汉朔2.13寸电子价签墨水屏&#xff0c;打造一个年耗电量不足1度电的极简网…...

MCP3208 SPI驱动开发:嵌入式多通道12位ADC实战指南

1. MCP3208 ADC驱动库深度解析&#xff1a;面向嵌入式工程师的SPI模数转换实战指南MCP3208是Microchip公司推出的8通道、12位分辨率、逐次逼近型&#xff08;SAR&#xff09;模数转换器&#xff0c;采用标准四线SPI接口通信&#xff0c;支持单端与差分输入模式&#xff0c;工作…...

终极指南:QLVideo让macOS视频预览支持200+格式,Finder管理效率提升300%

终极指南&#xff1a;QLVideo让macOS视频预览支持200格式&#xff0c;Finder管理效率提升300% 【免费下载链接】QuickLookVideo This package allows macOS Finder to display thumbnails, static QuickLook previews, cover art and metadata for most types of video files. …...

用ESP32和MAX4466做个无线对讲机?手把手教你MQTT传音频(附完整代码)

用ESP32和MAX4466打造高保真无线对讲系统&#xff1a;从硬件搭建到音质优化 记得去年在创客空间第一次听到用ESP32传输的实时音频时&#xff0c;那种"原来物联网还能这么玩"的震撼感至今难忘。今天我们就来复刻这个魔法——用不到百元的硬件成本&#xff0c;构建一套…...

Python医学影像处理实战:5分钟搞定NII/NRRD/DICOM格式互转(附完整代码)

Python医学影像格式转换实战&#xff1a;NII/NRRD/DICOM互转与可视化技巧 医学影像处理是医疗AI和临床研究的基础环节&#xff0c;而格式转换往往是数据处理流程中的第一个技术门槛。本文将带您快速掌握Python环境下NII、NRRD、DICOM三大主流医学影像格式的互转技巧&#xff0c…...

Phi-3-mini-gguf辅助C语言学习:从指针理解到项目实战

Phi-3-mini-gguf辅助C语言学习&#xff1a;从指针理解到项目实战 1. 为什么选择AI辅助学习C语言 学习C语言就像学骑自行车&#xff0c;刚开始总会摇摇晃晃&#xff0c;特别是遇到指针和内存管理这些概念时&#xff0c;很容易"摔跟头"。传统的学习方式往往需要反复查…...