2019年11月7日 Go生态洞察:Go Modules v2及更高版本


🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁

🦄 博客首页——🐅🐾猫头虎的博客🎐
🐳 《面试题大全专栏》 🦕 文章图文并茂🦖生动形象🐅简单易学!欢迎大家来踩踩~🌺
🌊 《IDEA开发秘籍专栏》 🐾 学会IDEA常用操作,工作效率翻倍~💐
🌊 《100天精通Golang(基础入门篇)》 🐅 学会Golang语言,畅玩云原生,走遍大小厂~💐

🐅🐾猫头虎建议Go程序员必备技术栈一览表📖:

☁️🐳 Go语言开发者必备技术栈☸️:
🐹 GoLang | 🌿 Git | 🐳 Docker | ☸️ Kubernetes | 🔧 CI/CD | ✅ Testing | 💾 SQL/NoSQL | 📡 gRPC | ☁️ Cloud | 📊 Prometheus | 📚 ELK Stack


🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🐅🐾🍁🐥


在这里插入图片描述

文章目录

    • 🐅🐾猫头虎建议Go程序员必备技术栈一览表📖:
  • 2019年11月7日 Go生态洞察:Go Modules v2及更高版本 🚀
    • 摘要
    • 引言
    • 正文
      • Go Modules的重大版本和模块路径 🛣️
      • 发布v2及更高版本 🌟
      • 维护多个主要版本 🛠️
    • 总结
    • 下一篇预告
  • 原创声明

  • 原创作者: 猫头虎

  • 作者wx: Libin9iOak

  • 作者公众号: 猫头虎技术团队

在这里插入图片描述

2019年11月7日 Go生态洞察:Go Modules v2及更高版本 🚀

摘要

大家好,我是猫头虎博主!今天,我们将深入探讨Go的一个关键话题:Go Modules的v2版本及其后续版本。如果你对Go生态的未来方向感到好奇,那就跟着我一起探索吧!搜索关键词包括Go Modules、版本控制、模块兼容性等。

引言

本文是系列博客的第四部分,旨在探讨Go Modules在版本2及以后的发展。对于一个成功的项目而言,随着需求的增加,有时过去的特性和设计决策可能不再适用。这就需要开发者通过删除废弃的函数、重命名类型或拆分复杂的包来整合他们学到的经验。这些变化需要下游用户投入精力迁移他们的代码到新的API,因此在做出这些改变前,应该仔细权衡利弊。

正文

Go Modules的重大版本和模块路径 🛣️

Go Modules确立了Go中一个重要原则——导入兼容规则

如果一个旧包和一个新包有相同的导入路径, 那么新包必须与旧包向后兼容。

根据定义,一个包的新主要版本与前一个版本不兼容。这意味着新的主要版本的模块必须有一个与前一个版本不同的模块路径。从v2开始,主要版本号必须出现在模块路径的末尾(在go.mod文件中的module语句中声明)。例如,github.com/googleapis/gax-go的作者在开发v2时,使用了新的模块路径github.com/googleapis/gax-go/v2。想要使用v2的用户必须更改他们的包导入和模块需求为github.com/googleapis/gax-go/v2

发布v2及更高版本 🌟

以下是使用github.com/googleapis/gax-go作为示例的发布过程:

$ pwd
/tmp/gax-go
$ ls
...
$ cat go.mod
module github.com/googleapis/gax-go
...

为了开始github.com/googleapis/gax-gov2开发,我们创建一个新的v2/目录并将包复制进去:

$ mkdir v2
$ cp -v *.go v2
...

接下来,通过复制当前的go.mod文件并添加/v2后缀来创建v2的go.mod文件:

$ cp go.mod v2/go.mod
$ go mod edit -module github.com/googleapis/gax-go/v2 v2/go.mod

请注意,v2版本被视为与v0 / v1版本不同的单独模块:两者可以在同一构建中共存。因此,如果你的v2+模块有多个包,你应该更新它们以使用新的/v2导入路径。

维护多个主要版本 🛠️

一旦我们对v2 API感到满意,并确信不需要其他重大更改,我们可以标记v2.0.0

$ git tag v2.0.0
$ git push origin v2.0.0

此时,我们需要维护两个主要版本。向后兼容的更改和bug修复将导致新的次要和补丁版本的发布(例如,v1.1.0v2.0.1等)。

总结

重大版本的变化导致了开发和维护的开销,并且要求下游用户投资以迁移到新版本。对于大型项目,这些开销往往更大。重大版本的变化只应在识别到一个有说服力的理由后进行。一旦确定了一个突破性变化的有力理由,我们建议在master分支上开发多个主要版本,因为它与更广泛的现有工具兼容。

v1+模块的重大更改应始终在新的vN+1模块中进行。新模块的发布意味着维护者和需要迁移到新包的用户的额外工作。因此,维护者在进行稳定版本发布之前,应该验证他们的API,并仔细考虑在v1之后是否真的需要重大更改。

本文被猫头虎的Go生态洞察专栏收录,详情点击这里。

关键知识点描述
Go ModulesGo的模块管理系统
版本控制管理不同版本的策略和实践
导入兼容规则Go中确保向后兼容性的原则
v2及更高版本管理和发布Go Modules的新版本
维护多版本同时维护多个版本的策略

下一篇预告

下次,我们将探讨Go的另一个里程碑:《Go Turns 10》。届时,我们将回顾Go语言的十年发展历程,探讨其影响力和未来趋势。不要错过!🎉

在这里插入图片描述

原创声明

======= ·

  • 原创作者: 猫头虎

  • 作者wx: Libin9iOak
    在这里插入图片描述

  • 作者公众号: 猫头虎技术团队

在这里插入图片描述

学习复习Go生态

本文为原创文章,版权归作者所有。未经许可,禁止转载、复制或引用。

作者保证信息真实可靠,但不对准确性和完整性承担责任

未经许可,禁止商业用途。

如有疑问或建议,请联系作者。

感谢您的支持与尊重。

点击下方名片,加入IT技术核心学习团队。一起探索科技的未来,洞察Go生态,共同成长。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

应用密码学期末复习(1)

学习资料 应用密码学总结_应用密码学知识点总结-CSDN博客 应用密码学期末复习知识点总结_5的36次方mod97__PriDe的博客-CSDN博客 【密码学】密码学期末考试速成课,不挂科!!#高数帮_哔哩哔哩_bilibili 目录 学习资料 第一章 概述 1.1信息…

淼一科技为互联网企业销毁硬盘数据 拆除机房设备

在上海这座繁华的大都市,淼一科技以其专业的服务和卓越的技术,为众多互联网企业提供硬盘数据销毁和机房设备拆除服务。作为业界领先的数据安全解决方案提供商,淼一科技致力于保障客户数据的安全与隐私,为客户创造更高的商业价值。…

uniapp前端+python后端=微信小程序支付到底怎么开发???国内的资料为什么没一篇能讲清楚,简简单单的只需要3步就可以了-V2版本

一.微信小程序支付 真的,在接到这个任务的时候,本以为很简单,不就是普通的浏览器复制粘贴,最不济找下gpt给生成一下,但是到实际开发就不同了,不是后端出问题就是前端,搜资料,上百度…

Current request is not a multipart request问题排查

概述 在应用工程里看到如下被标记为deprecated的代码,这对有代码洁癖的我而言是无法忍受的: row.getCell(10).setCellType(Cell.CELL_TYPE_STRING); String hospital row.getCell(0).getStringCellValue();对应的poi版本号?是的&#xff…

适用于iOS 的顶级苹果数据恢复软件

数据丢失可能随时发生在任何人身上,这可能是一种令人沮丧的经历。丢失 iOS 设备上的重要数据可能会造成特别严重的损失,因为其中可能包括有价值的照片、联系人、消息和其他重要文件。幸运的是,有多种数据恢复工具可以帮助用户恢复丢失的数据。…

filebeat日志收集工具

elk:filebeat日志收集工具和logstash相同 filebeat是一个轻量级的日志收集工具,所使用的系统资源比logstash部署和启动时使用的资源要小得多 filebeat可以运行在非Java环境,它可以代理logstash在非Java环境上收集日志 filebeat无法实现数据的过滤&…

定制开发办公软件在企业发展中的优势|app小程序网站搭建

定制开发办公软件在企业发展中的优势|app小程序网站搭建 如今,办公软件已经成为企业日常工作的必需品。很多企业为了提高工作效率和满足自身业务需要,选择定制开发办公软件。下面将介绍定制开发办公软件在企业发展中的优势。 首先,定制开发办…

DjiTello + YoloV5的无人机的抽烟检测

一、效果展示 注:此项目纯作者自己原创,创作不易,不经同意不给予搬运权限,转发前请联系我,源码较大需要者评论获取,谢谢配合! 1、未启动飞行模型无人机的目标检测。 DjiTello YOLOV5抽烟检测 …

EDA实验-----正弦信号发生器的设计(Quartus II )

目录 一、实验目的 二、实验仪器 三、实验原理 四、实验内容 五、实验步骤 六、注意事项 七、实验过程(操作过程) 1.定制LPM_ROM模块 2.定制LPM_ROM元件 3.计数器定制 4.创建锁相环 5.作出电路图 6.顶层设计仿真 一、实验目的 学习使用Ver…

Echarts地图registerMap使用的GeoJson数据获取

https://datav.aliyun.com/portal/school/atlas/area_selector 可以选择省,市,区。 也可以直接在地图上点击对应区域。 我的应用场景 我这里用到这个还是一个特别老的大屏项目,用的jq写的。显示中国地图边界区域 我们在上面的这个地区选择…

【开源】基于Vue+SpringBoot的独居老人物资配送系统

项目编号: S 045 ,文末获取源码。 \color{red}{项目编号:S045,文末获取源码。} 项目编号:S045,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 查询社区4…

ELK---filebeat日志收集工具

filebeat日志收集工具 filebeat日志收集工具和logstash相同 filebeat的优点: filebeat是一个轻量级的日志收集工具,所使用的系统资源比logstash部署和启动时使用的资源要小的多 filebeat可以运行在非Java环境。它可以代替logstash在非Java环境上收集…

Java学习路线第一篇:Java基础(2)

这篇则分享Java学习路线第一part:Java基础(2) 从看到这篇内容开始,你就是被选定的天命骚年,将承担起学完Java基础的使命,本使命为单向契约,你可选择YES或者选择YES。 具体路线安排&#xff1a…

深度学习第1天:深度学习入门-Keras与典型神经网络结构

☁️主页 Nowl 🔥专栏《机器学习实战》 《机器学习》 📑君子坐而论道,少年起而行之 文章目录 神经网络 介绍 结构 基本要素 Keras 介绍 导入 定义网络 模型训练 前馈神经网络 特点 常见类型 代码示例 反馈神经网络 特点 …

AlphaFold的原理及解读

1、背景 蛋白质是生物体内一类重要的生物大分子,其结构复杂多样,蛋白质的结构对于理解其功能和参与的生物学过程具有重要意义。从生物学角度上看,蛋白质的结构可以分为四个层次:初级结构、二级结构、三级结构和四级结构。 初级结…

企业如何保障跨境金融业务中的数据安全传输?

随着全球化的不断深入,跨境金融业务日益频繁,然而在这些业务中,数据的安全传输一直是企业面临的重大挑战。跨境业务数据传输可能会遇到多种困难,如网络攻击、数据泄露、通信故障等。因此,企业需要采取有效的措施来确保…

【Mybatis系列】Mybatis之TypeHandler入门

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

【C语言】深入理解数据类型转换与运算

文章目录 1.数据类型转换在分析源程序之前,我们需要了解几个基本概念:现在来分析源程序中的变量及其对应的十进制真值以及扩展操作方式: 1.1. short si -32768;1.2. unsigned short usi si;1.3. int i si;1.4. unsigned ui usi; 2&#x…

U-Net及其变体在医学图像分割中的应用研究综述

U-Net及其变体在医学图像分割中的应用研究综述 论文来自:中国生物医学工程学报 2022 摘 要: 医学图像分割可以为临床诊疗和病理学研究提供可靠的依据,并能辅助医生对病人的病情做出准确的判断。 基于深度学习的分割网络的出现解决了传统自动分…

Git——Git应用入门

将会介绍以下知识: 搭建Git环境和创建Git版本库(init、clone)。文件添加、状态检查、创建注释和查看历史记录。与其他Git版本库交互(pull、push)。解决合并冲突。创建分支列表、列表切换和合并。创建标签。 1、版本控…