2023年9月8日 Go生态洞察:gopls的扩展与Go生态系统的成长


🌷🍁 博主猫头虎(🐅🐾)带您 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程序员必备技术栈一览表📖:
  • 2023年9月8日 Go生态洞察:gopls的扩展与Go生态系统的成长 🌍
    • 摘要
    • 引言
    • 正文内容
      • gopls的改进和新架构 🛠️
        • 启动时间和内存使用的减少 📉
        • gopls和不断发展的Go生态系统 🌱
        • 重新审视gopls的编译器起源 🔍
        • 独立编译 📦
        • 细粒度的失效处理 ✂️
        • 新的可能性 🔮
      • 尝试一下!
    • 总结
    • 下一篇预告
  • 原创声明

  • 原创作者: 猫头虎

  • 作者wx: Libin9iOak

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

在这里插入图片描述

2023年9月8日 Go生态洞察:gopls的扩展与Go生态系统的成长 🌍

摘要

🐯 猫头虎博主来啦!今天咱们聊聊Go语言的世界里的新动态——gopls的最新进展。如果你是Go语言的爱好者或专业开发者,这篇文章会给你提供宝贵的洞察。搜索关键词:Go语言,gopls,性能优化,内存使用。

引言

大家好!猫头虎博主这次带来的是Go生态系统中的一次重要进展。最近,Go团队发布了gopls的v0.12版本,这不仅是一次简单的更新,而是一次对其核心架构的重写,使其能够更好地扩展到更大的代码库中。让我们深入了解一下!

正文内容

gopls的改进和新架构 🛠️

首先,让我们看一下这个重大更新的背后。gopls作为Go语言的语言服务器,在其v0.12版本中进行了核心重写。这是一项为期一年的努力,重点是在保持内存占用更少的情况下,保持与v0.11版本相同的交互查询速度(如自动完成或查找引用)。

启动时间和内存使用的减少 📉

让我们先看一些实际成果。下面的图表显示了GitHub上28个最受欢迎的Go仓库的启动时间和内存使用情况的变化。

在这些仓库中,节省的平均值约为75%,但内存减少是非线性的:项目越大,相对减少的内存使用越多。

gopls和不断发展的Go生态系统 🌱

自2018年问世以来,gopls已经合并了许多不同的命令行工具,并成为了VS Code Go扩展的默认后端,以及许多其他编辑器和LSP插件。随着时间的推移,Go生态系统的增长和代码库的扩大,要求我们改变gopls的扩展方式。

重新审视gopls的编译器起源 🔍

gopls在很多方面类似于编译器,它需要读取、解析、类型检查和分析Go源文件。在v0.11版本中,gopls将所有这些符号保留在内存中,导致内存占用与被编辑的源代码成正比,甚至更大。

独立编译 📦

为了解决这个问题,gopls v0.12引入了独立编译的概念,使用与编译器相同的包摘要格式。这一改变使gopls的内存使用与打开的包数量及其直接导入的数量成比例。

细粒度的失效处理 ✂️

当你在一个包中做出更改时,只需要重新编译直接或间接导入该包的包。gopls从一开始就在使用这个思路。v0.12版本引入了一种基于语法分析的更快速的剪枝启发式,通过在内存中保持一个简化的符号引用图,gopls可以快速确定一个包中的更改是否可能影响另一个包。

新的可能性 🔮

这些改进不仅

提高了性能,还使gopls得以实现一些以前受内存限制而无法实现的功能,例如健壮的静态分析和更简单的工作区配置。

尝试一下!

$ go install golang.org/x/tools/gopls@latest

请尝试使用最新版本的gopls,并填写这个调查问卷。如果遇到任何问题,请报告。

特性描述影响
核心重写提升大型代码库的处理能力⬆️ 性能提升
内存使用减少启动时间和内存使用显著减少⬇️ 资源需求
独立编译引入独立编译的概念⬇️ 内存占用
细粒度失效处理更有效的处理包之间的依赖关系⬆️ 编译效率
新功能静态分析等功能得以实现⬆️ 功能丰富

总结

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

下一篇预告

下一篇文章,我们将探讨Go语言中的WASI支持。敬请期待猫头虎博主带来的深入解析!🐯💻🚀

在这里插入图片描述

原创声明

======= ·

  • 原创作者: 猫头虎

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

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

在这里插入图片描述

学习复习Go生态

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

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

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

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

感谢您的支持与尊重。

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

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

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

相关文章

AI材料专题报告:AI革命催生新需求国产替代推动新方向

今天分享的AI系列深度研究报告:《AI材料专题报告:AI革命催生新需求国产替代推动新方向》。 (报告出品方:光大证券) 报告共计:25页 1、算力需求增长催生 800G 光模块需求 算力是数字经济时代新生产力&…

2023年10月9日 Go生态洞察:深入了解类型推断及其更多细节

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

【C++ Primer Plus学习记录】if语句

目录 一、if语句 二、if else语句 三、格式化if else语句 四、if else if else结构 一、if语句 if语句让程序能够决定是否应执行特定的语句。 if有两种格式:if和if else。 if语句的语法与while相似: if(test-condition)statement; 如果test-con…

Android 从assets读取文件装载成Bitmap,Kotlin

Android 从assets读取文件装载成Bitmap,Kotlin /*** fileName assets里面图片文件名*/fun readBitmapFromAssets(ctx: Context, fileName: String): Bitmap? {val assetManager: AssetManager ctx.assetsvar bitmap: Bitmap? nulltry {val inputStream assetMa…

Java预科知识

以下内容是根据狂神的Java说、chatgpt和csdn相关博客,结合自己的理解完成的。 Java了解 基于Java 开发了巨多的平台,系统,工具 构建工具: Ant, Maven, Jekins应用服务器:Tomcat, Jetty, Jboss, Websphere, weblogic…

程序员入门:打造抖音同城外卖小程序的技术解析

在当今数字化时代,外卖平台已经成为人们生活中不可或缺的一部分,而抖音作为一款社交媒体平台,也开始涉足同城外卖服务。本文将为初学者提供一份关于如何打造抖音同城外卖平台的技术解析,探讨其中的关键技术和步骤。 一、项目规划…

【C++】输入输出流 ⑤ ( cin 输入流对象 | cin.ignore() 函数 | cin.peek() 函数 | cin.putback() 函数 )

文章目录 一、cin.ignore() 函数1、cin.ignore() 函数简介2、cin.ignore() 函数原型3、代码示例 - cin.ignore() 函数 二、cin.peek() 函数1、cin.peek() 函数简介2、代码示例 - cin.peek() 三、cin.putback() 函数1、cin.putback() 函数简介2、代码示例 - cin.putback() 一、c…

if语句和switch语句来确定金额之下的优惠折扣

一、优惠规则 输入相应的金额,可以获得规则之下,金额相应的享受的折扣,需要先定义金额,然后就是使用if语句进行判断,使用switch语句选择判断规则之下对应的优惠折扣。 二、相关代码 public class DiscountPrice {p…

矩阵处理—Zigzag矩阵打印

与其明天开始,不如现在行动! 文章目录 Zigzag矩阵打印1.1 题目描述1.2 解决思路1.3 代码实现 💎总结 Zigzag矩阵打印 1.1 题目描述 有一个n行m列的矩阵,要求按照Z字形打印出数据,如图: 1.2 解决思路 用一…

Weblogic T3协议反序列化漏洞

文章目录 1. Weblogic T3协议反序列化漏洞1.1 漏洞描述1.2 基本原理1.3 漏洞复现1.4 修复建议 1. Weblogic T3协议反序列化漏洞 1.1 漏洞描述 说明内容漏洞编号CVE-2018-2628漏洞名称Weblogic T3协议反序列化漏洞漏洞评级高危影响范围Weblogic 10.3.6.0Weblogic 12.1.3.0Webl…

基于JavaWeb+SSM+Vue居住证申报系统小程序的设计和实现

基于JavaWebSSMVue居住证申报系统小程序的设计和实现 源码获取入口KaiTi 报告Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 KaiTi 报告 1.1题目背景 随着时代的发展,人口流动越来越频繁&#xff0…

pycharm安装

1.先去官网下载pycharm 2.下载python3.8 3.修改pip镜像 4.如果有环境变量没加的加一下

全国农服进万家系列活动——中国农业生产托管万里行在河北玉田举行

12月8日,“全国农服进万家系列活动-中国农业生产托管万里行”在河北省玉田县圆满举行。来自全国各地农业农村领域的嘉宾齐聚一堂,交流农业社会化服务典型经验,共话农业社会化服务高质量发展大事。 原农业部总农艺师、中国合作经济学会会长孙中…

【恋上数据结构】前缀树 Tire 学习笔记

Tire 需求分析 如何判断一堆不重复的字符串是否以某个前缀开头? 用 Set\Map 存储字符串(不重复)遍历所有字符串进行判断缺点:时间复杂度 O(n) 有没有更优的数据结构实现前缀搜索? Tire(和 Tree 同音&a…

Rust测试字符串的移动,Move

代码创建了一个结构体,结构体有test1 字符串,还有指向字符串的指针。一共创建了两个。 然后我们使用swap 函数 交换两个结构体内存的内容。 最后如上图。相同的地址,变成了另外结构体的内容。注意看指针部分,还是指向原来的地址…

input、el-input输入框输入规则

一、input 只能输入框只能输入正整数&#xff0c;输入同时禁止了以0开始的数字输入&#xff0c;防止被转化为其他进制的数值。 <!-- 不能输入零时--> <input typetext οninput"valuevalue.replace(/^(0)|[^\d]/g,)"><!-- 能输入零时--> <inp…

luceda ipkiss教程 43:画渐变圆弧型波导

案例分享&#xff1a; from si_fab import all as pdk import ipkiss3.all as i3 from ipcore.properties.restrictions import RestrictTuple from ipkiss.geometry.shapes.modifiers import __ShapePathBase__ import numpy as np from math import atan2class ShapePathTa…

54.grpc实现文件上传和下载

文章目录 一&#xff1a;简介1. 什么是grpc2. 为什么我们要用grpc 二&#xff1a;grpc的hello world1、 定义hello.proto文件2、生成xxx_grpc.pb.go文件3、生成xxx.pb.go结构体文件4、编写服务代码service.go5、编写客户端代码client.go 三、服务端流式传输&#xff1a;文件下载…

什么是web组态?一文读懂web组态

随着工业4.0的到来&#xff0c;物联网、大数据、人工智能等技术的融合应用&#xff0c;使得工业领域正在经历一场深刻的变革。在这个过程中&#xff0c;web组态技术以其独特的优势&#xff0c;正在逐渐受到越来越多企业的关注和认可。那么&#xff0c;什么是web组态&#xff1f…

【springboot设计源码】庆阳非物质文化遗产展示平台课题背景、目的、意义、研究方法

该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等学习内容。 目录 一、项目介绍&#xff1a; 二、文档学习资料&#xff1a; 三、模块截图&#xff1a; 四、开发技术与运行环境&#xff1a; 五、代码展示&#xff1a; 六、数据库表截图&#xff1…