2019年12月19日 Go生态洞察:Go模块化之旅

news2024/11/25 8:19:42

🌷🍁 博主猫头虎(🐅🐾)带您 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年12月19日 Go生态洞察:Go模块化之旅
    • 摘要
    • 引言
    • 🚀 正文
      • 🌱 Go模块的诞生背景
      • 🔄 Go版本的进化
      • 🛠️ 工具与IDE集成
      • 📦 模块索引
      • 🔒 模块认证
      • 模块认证的必要性 🔐
      • 模块镜像的作用 📡
      • 模块发现的进展 🔎
      • 大局观
    • 表格:知识要点总结
    • 总结
    • 下一篇预告
  • 原创声明

  • 原创作者: 猫头虎

  • 作者wx: Libin9iOak

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

在这里插入图片描述


🌟 2019年12月19日 Go生态洞察:Go模块化之旅

摘要

🐯 猫头虎博主在此!探索Go语言世界的朋友们,今天我们将深入挖掘Go模块化的旅程。作为搜索词条的高频命中,Go的模块化进程自2018年以来引起了广泛关注。让我们一起揭开Go模块化的面纱,探索其深刻影响!

引言

Go语言作为一种高效的编程语言,在2018年进行了一次重大变革——Go模块(Go Modules)。这一变革标志着Go生态从传统的GOPATH模式转向更现代化的模块管理方式。接下来的内容将详细介绍Go模块的发展历程、特性及其对Go生态的影响。

🚀 正文

🌱 Go模块的诞生背景

2018年对Go生态来说是具有里程碑意义的一年。Go社区集中关注包管理问题,并于2月开始探讨如何将包管理直接集成到Go工具链中。8月,我们首次粗略实现了这一功能,即Go模块,并在Go 1.11中引入。这一变革是自Go 1以来,对Go生态最深远的改变。

module my/thing
go 1.11

require (
    other/thing v1.0.2
    new/thing v2.3.4
)

🔄 Go版本的进化

Go 1.11于2018年8月发布,初步支持模块。模块支持与传统的GOPATH机制并行存在。go命令在GOPATH/src外的目录树中运行时默认启用模块模式,根据目录中的go.mod文件标识。这个设置可以通过设置$GO111MODULE环境变量为onoff来覆盖;默认行为是auto模式。我们已经看到了模块在Go社区的显著采用,以及许多有用的建议和错误报告帮助我们改进模块。

Go 1.12计划于2019年2月发布,将细化模块支持,但默认仍处于auto模式。除了许多错误修复和其他小改进外,Go 1.12最显著的变化是,像go run x.gogo get rsc.io/2fa@v1.1.0这样的命令现在可以在GO111MODULE=on模式下运行,而无需显式的go.mod文件。

我们的目标是在2019年8月计划的Go 1.13中默认启用模块模式(即将默认值从auto更改为on),并弃用GOPATH模式。为此,我们一直在改进工具支持以及对开源模块生态系统的支持。

🛠️ 工具与IDE集成

在过去的八年中,我们已经创造了大量工具,这些工具假定Go源代码存储在GOPATH中。转向模块需要更新所有做出这种假设的代码。我们设计了一个新包golang.org/x/tools/go/packages,它抽象了查找和加载给定目标的Go源代码的操作。这个新包自动适应GOPATH和模块模式,并且也可以扩展到特定于工具的代码布局,如Bazel所使用的布局。我们一直在与Go社区的工具作者合作,帮助他们在他们的工具中采用golang.org/x/tools/go/packages。

作为这一努力的一部分,我们还在努力将各种源代码查询工具如gocode、godef和go-outline统一为一个工具,该工具可从命令行使用,并支持现代IDE使用的语言服务器协议。

模块的过渡和包加载中的变化也促使Go程序分析发生了重大变化。作为对go vet的重构以支持模块,我们引入了一个用于Go程序的增量分析的通用框架,在该框架中,分析器一次针对一个包进行调用。在这个框架中,一个包的分析可以写出事实,供导入第一个包的其他包的分析使用。例如,go vet对log包的分析确定并记录了log.Printffmt.Printf的包装器。然后go vet可以检查调用log.Printf的其他包中的printf风格格式字符串。这个框架应该能够启用许多新的、复杂的程序分析工具,帮助开发人员更早地发现错误并更好地理解代码。

📦 模块索引

go get的最初设计中最重要的部分之一是它是去中心化的:我们当时相信,今天仍然相信,任何人都应该能够在任何服务器上发布他们的代码,与Perl的CPAN、Java的Maven或Node的NPM等中心注册表形成对比。将域名放在go get导入空间的开始部分,重用了一个现有的去中心化系统,并避免了重新解决谁可以使用哪些名称的问题。它还允许公司在私有服务器上导入代码,与公共服务器上的代码并行。

我们正在开发一个新服务,Go模块索引,它将提供一个公共日志,记录进入Go生态系统的包。像godoc.org和goreportcard.com这样的网站将能够观察这个日志,以获取新条目,而不是每个独立实现代码来找到新包。我们还希望该服务允许使用简单查询查找包,以允许goimports为尚未下载到本地系统的包添加导入。

🔒 模块认证

目前,go get依赖于连接级认证(HTTPS或SSH)来检查它是否正在与正确的服务器通信以下载代码。没有对代码本身的额外检查,如果HTTPS或SSH机制以某种方式受到了影响,则存在中间人攻击的可能性。去中心化意味着构建所依赖的代码是从许多不同的服务器获取的,这意味着构建依赖于许多系统来提供正确的代码。

Go模块设计通过在每个模块中存储go.sum文件来改进代码认证;该文件列出了模块每个依赖项的预期文件树的加密散列。使用模块时,go命令使用go.sum来验证在构建中使用依赖项之前,它们是否与预期版本逐位相同。但go.sum文件只列出了该模块所使用的特定依赖项的散列。如果您正在添加新依赖项或使用go get -u更新依赖项.

模块认证的必要性 🔐

go get依赖于连接级别的认证(HTTPS或SSH)来确保下载代码的安全性。在模块设计中,通过在每个模块中存储go.sum文件来改善代码认证,该文件列出了模块依赖项的预期文件树的加密哈希。

模块镜像的作用 📡

由于go get从多个源服务器获取代码,因此代码的获取速度和可靠性受限于最慢、最不可靠的服务器。模块镜像的引入,为解决这一问题提供了新

的方案。

模块发现的进展 🔎

我们提到的模块索引将使构建像godoc.org这样的网站变得更容易。2019年的部分工作将是对godoc.org进行重大改造,使其对于需要发现可用模块的开发者更加有用。

大局观

以下图表展示了本文中讨论的设计中模块源代码的流动方式。

Go模块化流程

表格:知识要点总结

关键点描述
Go 1.11引入Go模块的初步实现
Go 1.12进一步完善模块支持
工具与IDE集成新的包以适应GOPATH和模块模式
模块索引提供公共日志,记录新包
模块认证通过go.sum文件提高安全性
模块镜像提高代码获取的速度和可靠性
模块发现重塑godoc.org,改善模块发现体验

总结

本文被猫头虎的Go生态洞察专栏收录,详情点击这里。我们深入探讨了Go模块化的起源、发展及其在Go生态中的重要性。从Go 1.11到Go 1.12,再到工具和模块认证的进步,Go的模块化之旅充满挑战与机遇。

下一篇预告

下一篇博文,我们将深入探索《Go 1.12的发布》。敬请期待,随着Go语言的不断进化,我们一起见证每一个重要时刻! 🚀🌟

在这里插入图片描述

原创声明

======= ·

  • 原创作者: 猫头虎

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

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

在这里插入图片描述

学习复习Go生态

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

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

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

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

感谢您的支持与尊重。

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

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

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

相关文章

本地Nginx服务搭建结合内网穿透实现多个Windows Web站点公网访问

文章目录 1. 下载windows版Nginx2. 配置Nginx3. 测试局域网访问4. cpolar内网穿透5. 测试公网访问6. 配置固定二级子域名7. 测试访问公网固定二级子域名 1. 下载windows版Nginx 进入官方网站(http://nginx.org/en/download.html)下载windows版的nginx 下载好后解压进入nginx目…

软件建模与文档:架构师怎样绘制系统架构蓝图?

Java全能学习面试指南:https://javaxiaobear 首先,请你设想这样一个场景:如果公司安排你做架构师,要你在项目开发前期进行软件架构设计,你该如何开展你的工作?如何输出你的工作成果?如何确定你的…

js获取当前时间并转换各种形式

执行代码 const time new Date();console.log(time);console.log(time.toDateString());console.log(time.toTimeString());console.log(time.toJSON());console.log(time.toISOString());console.log(time.toLocaleDateString());console.log(time.toLocaleString());console…

【面经八股】搜广推方向:面试记录(三)

【面经&八股】搜广推方向:面试记录(三) 文章目录 【面经&八股】搜广推方向:面试记录(三)1. 编程题1.1 大数乘法1.2 大数加法2. 项目介绍3. 有了解过的广告推荐模型吗4. 广告模型回归问题1. 编程题 上来直接写编程题,有点儿懵逼。 1.1 大数乘法 可以参考 该博…

​使用PotPlayer播放器查看软解和硬解4K高清视频时的CPU及GPU占用情况​

目录 1、问题说明 2、PotPlayer播放器介绍 3、视频的软解与硬解 4、使用PotPlayer查看4K高清视频软解和硬解时的CPU占用情况 4.1、使用软解时CPU和GPU占用情况 4.2、使用硬解时CPU和GPU占用情况 5、最后 VC常用功能开发汇总(专栏文章列表,欢迎订阅…

13年测试,自动化测试-常见问题总结,测试进阶专项...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、自动化测试简介…

NX二次开发UF_CURVE_ask_point_data 函数介绍

文章作者:里海 来源网站:https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_ask_point_data Defined in: uf_curve.h int UF_CURVE_ask_point_data(tag_t point, double point_coords [ 3 ] ) overview 概述 Returns the coordinates for the spec…

Redis面试题:Redis集群方案有哪些,介绍一下主从同步

目录 面试官:Redis集群有哪些方案? 面试官:介绍一下主从同步 面试官:主从同步数据的流程(主从数据同步原理) 面试官:Redis集群有哪些方案? 候选人:嗯~~,在Redis中提供的集群方案…

成都优优聚美团代运营——让您脱颖而出!

随着互联网的快速发展,越来越多的企业开始注重线上业务的拓展,而美团作为国内领先的生活服务平台之一,自然成为了许多品牌宣传和推广的重要渠道。在成都地区,优优聚美团代运营公司凭借多年的经验和专业团队的优势,成为…

蓝牙概述及基本架构介绍

蓝牙概述及基本架构介绍 1. 概述1.1 蓝牙的概念1.2 蓝牙的发展历程1.3 蓝牙技术概述1.3.1 Basic Rate(BR)1.3.2 Low Energy(LE) 2. 蓝牙的基本架构2.1 芯片架构2.2 协议架构2.2.1 官方协议中所展示的蓝牙协议架构2.2.1.1 全局分析2.2.1.2 局部分析 2.2.2…

矢量图片转换软件Vector Magic mac中文版功能特色

Vector Magic mac是一款图片转换矢量图,该软件使用世界上最好的全彩色自动描摹器,快速准备好您的作品进行打印、绣花、剪裁等操作。 Vector Magic mac功能特色 只需上传即可在线自动将 JPG、PNG、BMP 和 GIF 位图图像转换为真正的 SVG、Eps 和 PDF 矢量…

【前端】three.js

文章目录 概述three.js-master目录结构Threejs 的基本要素场景相机透视相机正交相机 网格2d3d 灯光AmbientLight(环境光)平行光(DirectionalLight)点光源(PointLight)聚光灯(SpotLight) 渲染器 Threejs 的实…

NABOCUL集团专注科研创新 为内源护肤、护发提供更优选择

据权威媒体报道,日本知名化妆品集团NABOCUL Cosmetics株式会社研通过多年的科技创新和内源护肤研究,创新研发Olandu、TakuMin、“CIMIVOSOTUY”等核心成分,向中国消费者传递“关爱恒久之美”的理念,更好地释放内源护肤的独特魅力,为人们内源护肤、护发提供了全新选择。 据了解,…

如何使用vs2022通过excel.exe生成VC、C++能够使用的头文件

我们在开发MFC、VC、C项目时,有时候需要操作excel文件的读写,我们一般常用方式是调用微软的excel驱动方式调用,但调用驱动前,我们需要生成我们C能够调用到的头文件,一般常用文件有: #include "CAppli…

内网穿透的应用-Jupyter Notbook+cpolar内网穿透实现公共互联网访问使用数据分析工作

文章目录 1.前言2.Jupyter Notebook的安装2.1 Jupyter Notebook下载安装2.2 Jupyter Notebook的配置2.3 Cpolar下载安装 3.Cpolar端口设置3.1 Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 在数据分析工作中,使用最多的无疑就是各种函数、图表、…

spirng+maven实现的宠物管理系统

spirngmaven实现的宠物管理系统,演示地址:登录页面 共分为3中角色 管理员 账号:admin 密码:123456 医生: 账号:医生1 密码:123456 普通用户: 账号:1 密码:123456 数据库为mysql5.7…

人工智能入门,什么是AlphaGo式搜索?

AlphaGo式搜索是一种搜索算法,它是由DeepMind开发的AlphaGo团队在开发AlphaGo程序时使用的搜索策略。 AlphaGo是一个基于人工智能的围棋程序,它在2016年击败了世界冠军柯洁,引起了广泛的关注。 AlphaGo式搜索的核心思想是使用蒙特卡洛树搜索…

全文检索[ES系列] - 第495篇

历史文章(文章累计490) 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 M…

软件测试工程师一定要会的用例设计思路

职场新人对测试用例的困惑无非有以下几点 1、什么是测试用例,为什么要写测试用例? 2、不知道怎么写,写了也不知道写的是否完整。 同时,在这我也准备了一份软件测试视频教程(含接口、自动化、性能等)&…

伦敦金现图形态分析(深度好文)

对价格行为交易者来说,伦敦金价走势图表中的一些特殊形态,能够带来比较靠谱的交易信号。然而交易并不只和形态有关,也和我们能够从图表形态中阅读到什么,以及如何理解其他交易者对价格波动的推动有关。 在对伦敦金走势图的技术形态…