【青训营】Go的依赖管理

news2024/10/5 12:32:37

Go的依赖管理

本节内容来自于:字节跳动青年训练营第五届 后端组

1.什么是依赖

实际开发的工程需要使用许多第三方库,这能够使得我们站在巨人的肩膀上,使用第三方库中封装好的函数,可以大大方便我们的程序开发,第三方库中广泛的功能,是标准库所不具备的,这些我们使用的库,又称为依赖。对于庞大的项目来说,是需要使用到许多库的,为了更好的管理库,我们需要使用依赖管理工具

Go的依赖库主要经过了三次迭代
image.png
主要目的:
1.根据不同环境不同项目使用不同依赖
2.控制依赖库的版本

2.GOPATH

GOPATH是Go的一个环境变量,其中GOPATH指向的路径有三个文件夹

bin:项目编译的二进制文件

pkg:项目编译的中间文件

src:项目依赖的库的存放位置

下图我们可以看到GOPATH中的src,pkg和bin三个文件夹
image.png

在src中可以看到许多我们之前使用过的包
image.png

在cmd 使用

go get 包名

会将最新的包下载到src中

GOPATH的问题在于无法实现package的多版本控制

image.png

3.GoVendor

  • 项目目录下增加vendor文件,所有依赖包副本形式放在$ProjectRoot/vendor的位置

image.png
不同的项目中的vendor的依赖包版本可以不同

vendor的问题在于:

image.png
如果一个Project需要依赖包A和B,而包A需要使用V1版本的依赖D,包B需要依赖于V2版本的依赖D,那么照样会引发冲突

4.GoModule

通过go.mod文件管理依赖包版本
通过go get/ go mod指令管理依赖包
该依赖管理在1.1版本实装,一般默认开启

依赖管理有三要素:

image.png

打开一个go.mod文件,可以看到其如下:

image.png
其中module std为依赖管理基本单元

go 1.19指明了go的原生库的版本号

require中的内容为单元依赖,表示了该单元需要依赖的包,后面的//indirect为表示该依赖是非直接依赖(间接依赖)

GoModule不同于GoPath和GoVendor,它是有版本管理的,其中有两种表示法:

// 语义化版本
${MAJOR}.${MINOR}.${PATCH}
//例子
V1.3.0 // 其中1为MAJOR,3为MINOR,0为PATCH

其中不同的MAJOR之间是代码隔离的,MINOR是一些新增功能的版本,PATCH是一些bug修补的迭代

image.png
版本x.0.0和语义化版本一样,yyyymmddhhmmss为时间,后面的为HASH校验码

5.依赖分发

依赖分发用于表示可以使用何种方式获取依赖,依赖可以从各种代码仓库中取得,但是有以下问题:1.无法保证构建稳定性 2.无法保证依赖可用性 3.增加代码仓库压力

为此,我们使用GoProxy,是一种中转代理服务站点,它会缓存各个托管仓库的代码内容,不会频繁使用代码仓库,也不会因为依赖被更改而无法确保构建的稳定性,从而实现了稳定可靠的依赖分发

image.png

GoProxy通过设置GOPROXY环境变量来表示,比如:

GOPROXY="https://proxy1.cn, https://proxy2.cn, direct

在上述例子中,Go获取依赖时会首先到https://proxy1.cn 获取,如果找不到则跳转到 https://proxy2.cn 如果还是找不到,那么就会前往源站(direct)中查找

6.go get命令

go get命令用于获取依赖,使用方法如下:

image.png

go mod命令

image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/168550.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Microsoft Teams上的编程教育

内容提示:Microsoft Teams上的 MakeCode Arcade 使用形式:Microsoft Teams中的 “作业” 服务 应用场景:编程教育 社团活动 个人经验:在校期间,每周学校都会有社团活动,学生们根据自己的兴趣爱好来选择社…

struct 结构体的内存对齐

💙作者:阿润菜菜 📖专栏:一起学习C言 本文目录 在内存中观察 结构体内存对齐的规则: 为什么存在内存对齐? 编程中我们该如何设计结构体? 修改默认对齐数 相关笔试题 在内存中观察 首先…

el-date-picker 目前只能通过点击input输入框触发日期选择器,怎么通过其他方式触发日期选择器同时把input输入框去掉,如点击按钮

依然是该模块由于后端接口数据传输限制 在前面文章里做了些许改动。 需求左右切换 可以快速找到年份,于是添加了element选择年份的日期组件。 图中隐藏了el-data-picker日期组件,手动添加样式展示时间栏选择的数据进行 0 回显。 点击时间时,…

想看看一个影片评论怎么样?python带你采集数据做词云

前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 目录前言环境使用:模块使用安装python第三方模块:思路分析代码展示数据采集词云图尾语 💝环境使用: Python 3.8 解释器 Pycharm 编辑器 模块使用 import parsel >>> pip install parsel import req…

《玩转 Spring 全家桶》学习笔记Day1

Spring 诞生于2002年,成型于2003年。Spring Boot 负责构建、Spring Cloud 协调、Spring Cloud Data Flow 负责连接一切。Spring Framework理念,向后兼容,专注API设计,让选择无处不在,海纳百川,严苛的代码质…

N+1终于等到了 但却放弃了

在公司呆了8年了,做梦都想被开除,年底等到了。但......2021年年底绩效B,可是公司年终奖泡沫了;估摸着2022年公司可能会发奖金,那我也悄悄的给自己定了目标,大干一场,争取过年拿个好结果。跟着公…

Go语言的数据类型

博客主页:🏆看看是李XX还是李歘歘 🏆 🌺每天不定期分享一些包括但不限于计算机基础、算法、后端开发相关的知识点,以及职场小菜鸡的生活。🌺 💗点关注不迷路,总有一些📖知…

功率放大器模块在超微晶合金磁特性测量研究中的应用

客户需求:对超微晶合金磁特性测量中的波形发生与控制问题进行研究,实验系统有严格的体积要求,上位机可外置,测试系统需集成于机箱,机箱尺寸:1900mm500mm600mm。 解决方案:功率放大器模块采用安泰…

Golang的error和panic

博客主页:🏆看看是李XX还是李歘歘 🏆 🌺每天不定期分享一些包括但不限于计算机基础、算法、后端开发相关的知识点,以及职场小菜鸡的生活。🌺 💗点关注不迷路,总有一些📖知…

Python入门自学进阶-Web框架——30、DjangoAdmin项目应用-自定义用户认证续

一、前面实现的是DjangoAdmin实现的自定义用户认证管理,现在自己来实现管理功能,即在mytestapp中增加用户认证管理功能。 在UserProfile的model中,对password字段增加help_text属性: password models.CharField(_(password), m…

Linux 环境安装 jdk 或 openjdk

一、linux 环境安装JDK的tar.gz包,通用命令: 1、查看已安装的JDK版本rpm -qa | grep jdk2、删除不需要的JDK版本:rpm -e --nodeps java-1.8.0-openjdk3、解压新JDK至/usr/lib/jvm目录下tar -zxvf openjdk-1044_linux-x64_bin_ri.tar.gz -C /…

AOSP刷机笔记

下载官方镜像,下载对应AOSP,编译出的*.img替换到官方镜像对应的文件, 刷入 把证书放到aosp源码的system/ca-certificates/files文件夹里,lunch aosp_sailfish-user编译可以实现无root抓包 mkdir ~/bin PATH~/bin:$PATH curl -sSL https://ger…

什么是集中采购 集中采购管理软件介绍

什么是集中采购? 集中采购是指企业总部某特定部门对企业所有采购进行管控,他们负责获取整个组织需要的物资。这个部门负责与供应商联络、供应商寻源、合同管理、风险分析,以及从供应商那里获得所需物资的每项工作。 企业采用集中采购管理模…

什么叫joinquant量化策略?

joinquant量化主要是在数据挖掘上有特别的意义,不像平时我们在执行各个量化选股策略时,还要一个一个去输入去查询。而joinquant量化策略在开发方面就简便了很多,joinquant量化策略是运用到个股量化交易中能够针对各个股票数据都能快速挖掘出来…

mongodb安装和部署,并整合到Springboot

mongodb安装和部署,并整合到Springboot 1.linux上docker安装mongodb docker pull mongo:4.4.18使用docker命令启动: docker run -p 27017:27017 --name mongo \ -v /mydata/mongo/db:/data/db \ -d mongo:4.4.18运行容器 docker exec -it mongo /bin/bash# 进入…

C进阶_字符串查找库函数

strstr 查找strstr的文档,可知它的原型为: char *strstr( const char *string, const char *strCharSet ); 它的返回值,根据文档是这样的: Return Value Each of these functions returns a pointer to the first occurrence …

使用 YonBuilder 进行报表分析 - 扩展篇

使用 YonBuilder 进行报表分析 - 扩展篇 在上一篇文章中,我们讲解了如何构建简单的报表以及交叉表的基础配置。本篇文章通过对主子表、树型表以及数据穿透的创建来对 YonBuilder 的报表配置进行扩展介绍。 创建报表 首先,要先创建一个员工信息实体&…

CSS选择器整理学习(中)

书接上回,在前端项目开发中,有时候需要对特殊的元素进行特殊的处理,但有时候元素的位置不确定、层级不确定、数量不确定等问题,导致我们没办法进行元素的选择,这个时候我们就需要用到元素选择器了。 一、CSS选择器 1…

加油站视频监控智能分析盒基于yolov5

加油站视频监控智能分析盒基于yolov5人工智能视觉技术,对现场画面中明火和烟雾以及人员抽烟、打电话等违规行为进行识别。除此之外,还可以对现场画面中卸油时灭火器未按要求正确摆放以及静电释放时间不足和人员离岗等不规范行为进行自动预警。YOLOv5在YO…

【云原生】k8s图形化管理攻击之rancher

内容预知 前言 1. Rancher的相关知识 1.1 Rancher的简介 1.2 Rancher与k8s的关系及区别 1.3 Rancher具有的优势 2. Rancher的安装部署 2.1 实验环境与部署图分配 2.2 具体的部署操作 (1)在 rancher 节点下载 rancher 镜像 (2&#xff…