go channel 缓冲区最大限制_Go语言11周年,泛型问题有望明年得到解决

920704363ba975990e2e3d7297d813ec.png 作者 | 田晓旭、万佳 近日,Go 团队发布长篇博文庆祝 Go 语言开源 11 周年。

Go 团队在博文写道,“回想 Go 语言十周年庆典恍如隔世。虽然 2020 年有诸多艰难,但我们一直在推动 Go 语言的发展,其中有不少值得回忆的美好瞬间。”

1 Go 语言 2020 年的重大进展

2 月——Go 1.14 版本带来 Go 模块的首个“生产就绪”实现,同时迎来一系列性能改进,包括用于减少调度并降低垃圾收集延迟的更快推迟速度及非合作 goroutine 抢占。

3 月——推出了新的协议缓冲区 API,它大大提高了对协议缓冲区反射及自定义消息的支持能力。

5 月——开发团队启动了用 Go 编写的参考后端服务器。

博文写道,“我们继续改进 gopls,借此在多种编辑器中实现了对高级 Go 感知功能的支持。”

6 月——VSCode Go 扩展正式加入 Go 项目,目前由负责 gopls 的同一位开发者进行维护。同样在这个月,Go 团队对 pkg.go.dev 代码进行开源,并将其作为 Go 项目的组成部分。6 月下旬,团队发布了关于泛型的最新设计草案。

7 月——Go 团队发布并讨论了三套新的设计草案以供后续修改:new //go:build lines for file selection、 file system interfaces 和 build-time file embedding。

8 月——Go 1.15 版本主要提供优化与 bug 修复。最重要的是,Go 团队开始重写链接器,使其运行速度提高了 20%,并且在大型构建作业中的平均内存占用量降低了 30%。

2 2021 年 Go 语言发布计划

2021.2——Go 1.16 将包含新的文件系统接口与 build-time 文件嵌入。新版本还将完成对链接器的重写,借此带来更可观的性能改进。1.16 版本也将提供对采用新一代苹果芯片(GOARCH = arm64)的 Mac 设备的支持。

2021.8——Go 1.17 将带来更多功能与改进,但目前还无法确定太多细节。根据计划,1.17 版本将提供一项针对 x86-64、基于寄存器的新型调用约定(不影响现有指令集!),使得程序的整个运行流程变得更快。(其他架构将在未来的版本中发布。)

此外该版本还将包含新的 //go:build 行,出错几率比现有 //+build 行更低。最后,Go 团队还希望能在明年对另一项备受期待的功能完成 Beta 测试,即支持 gotest 命令中的模糊测试。

3 Go 模块

明年,Go 团队将继续致力于开发对 Go 模块的支持,并更好地将其集成到整个 Go 生态系统中。Go 1.16 将包含迄今为止最为流畅的 Go 模块体验。据悉,当前有 96% 的用户已经使用 Go 模块。

Go 团队还将终止对基于 GOPATH 开发工作的支持。未来,使用标准库以外任何其他依赖项的程序,都需要配合 go.mod。

最初,Go 模块的目标就是“将软件包版本的概念融入 Go 开发者与我们工具的日常场景当中”,借此为整个 Go 生态系统中的模块及版本提供深度支持。事实上,Go 模块的镜像、校验数据库以及索引在实现过程中也充分考虑到整个生态系统范围内的软件包版本。明年,Go 团队将在工具与系统中推出更多丰富的模块支持选项。

并且,Go 团队还创建了 gopls 以减少以往编辑器在支持 Go 时需要使用的多种工具。这类工具绝大多数不支持模块,因此必须加以替换。明年,Go 团队将着手在 VSCode Go 扩展中默认使用 gopls,同时发布 gopls1.0,希望为大家带来出色的模块体验。Gopls 的一大优势在于,其具备编辑器中立性:任何能够理解该语言服务器协议的编辑器都可以正常使用。

版本信息的另一个重要用途,在于跟踪 build 中的各软件包是否存在已知漏洞。明年,Go 团队计划开发一套已知漏洞数据库,外加与之配套的漏洞检查工具。

Go 软件包发现站点 pkg.go.dev 也将在 Go 模块的支持下获得版本感知功能。

此外,Go 团队明年还会将 godoc.org 统一进 pkg.go.dev 当中。并且,还将扩展各软件包的版本时间表,列出各个版本的重要变更及已知漏洞等,希望能够以总体目标为基础帮助大家更明智地选择适合添加的依赖项。

“我们高兴地看到从 GOPATH 到 GO 模块的迁移之旅即将完成,而 Go 模块也开始推出一系列强大的依赖项感知工具。”博文写道。

4 泛型

根据 Go 语言社区发布的 2019 年度调查报告表明,79% 的受访者认为泛型是 Go 缺失的关键特性。缺少泛型和模块 / 包管理器使用是受访者面临的最大挑战。而这一问题有望在 2021 年得到缓解。

在今年 6 月,Go 团队发布了关于泛型的最新设计草案,此后一直在完善相关工作,并将注意力转移到生产就绪版本的实现身上。

Go 团队称,“我们将在 2021 年年内继续努力,力争在年底前为大家带来一些可供试用的成果,也许会以 Go 1.18 beta 的形式发布。”

5 ”加速奔跑“的 Go 语言

Go 语言的创始人之一 Rob Pike 在 2017 年的一篇文章《Go: Ten years and climbing》中,他回顾了 Go 语言的发展历程。文章提到,Go 语言这十年的迅猛发展竟如此之快,让他们自己都没想到。

更重要的是,Go 语言成为了云计算领域新一代的开发语言。并且,随着云原生的兴起和发展,Go 语言几乎占据了绝对的主流地位。无论是 Docker、Kubernetes,还是 Istio 和 Prometheus 等,都是用 Go 语言开发的。

Go 语言也受到海内外互联网大公司的热捧,像 Youtube、Uber 等使用 Go 作为自己的主力开发语言进行业务的迭代。在国内,今日头条、阿里巴巴、美团、B 站等知名公司,都在大量使用 Go 语言来重构部分甚至全部业务。而在游戏后端领域也有大量的公司在使用 Go 语言进行研发。

左耳朵耗子在《左耳听风》中谈了谈对 Go 语言的体会:

第一,语言简单,上手快。Go 语言的语法特性简直是太简单了,简单到你几乎玩不出什么花招,直来直去的,学习难度很低,容易上手。

第二,并行和异步编程几乎无痛点。Go 语言的 Goroutine 和 Channel 这两个神器简直就是并发和异步编程的巨大福音。像 C、C++、Java、Python 和 JavaScript 这些语言的并发和异步的编程方式控制起来就比较复杂了,并且容易出错,但 Go 语言却用非常优雅和流畅的方式解决了这个问题。这对于编程多年受尽并发和异步折磨的我来说,完全就是眼前一亮的感觉。

第三,Go 语言的 lib 库“麻雀虽小,五脏俱全”。Go 语言的 lib 库中基本上有绝大多数常用的库,虽然有些库还不是很好,但我觉得这都不是主要问题,因为随着技术的发展和成熟,这些问题肯定也都会随之解决。

第四,C 语言的理念和 Python 的姿态。C 语言的理念是信任程序员,保持语言的小巧,不屏蔽底层且对底层友好,关注语言的执行效率和性能。而 Python 的姿态是用尽量少的代码完成尽量多的事。于是我能够感觉到,Go 语言是想要把 C 和 Python 统一起来,这是多棒的一件事。

a8c16d5c05a3d440ac64d3f61dedd0ad.png

c7ab218e8e401a742ffdafe33e8b3549.png

当然,Go 语言也存在诸多的问题,比如垃圾回收、异常处理、泛型编程等。

不过,我们相信 Go 团队和社区未来也会逐步解决这些问题。

今日文章推荐:

值得推荐的13个 Jenkins 替代方案

点个在看少个 bug ?

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

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

相关文章

深度linux 转中文,Linux Deepin 中文Linux系统的新希望?

Linux Deepin 中文Linux系统的新希望?出处:快科技 2010-08-02 22:51:18 作者:Plum 编辑:Plum[爆料] 收藏文章前言说到国产系统,我们想到的东西可能并不多,在这个Windows垄断的领域,国产的空…

耳机不分主从是什么意思_无延时音质好的蓝牙耳机能代替有线耳机吗—DOSS T60上手体验...

伴随着手机的更新迭代,大概是从iPhone 7的时候大家开始对手机是否有3.5mm耳机孔这个问题开始纠结起来,好像是从真无线耳机出来时大家又对3,5mm耳机孔又不是那么的纠结。此一时彼一时,大家为何对耳机接口为何有这么大的转变,就拿今…

switch安装linux教程,Freeswitch Linux安装教程 | 【韩涛博客】

大家都有一个经历,经过漫长的编译后,各种报错,经过整理后,我总结出了以下无错步骤:(一)安装编译所需要的环境包yum install -y autoconf automake libtool gcc-c ncurses-devel make zlib-devel libjpeg-devel(二)安装…

python软件如何安装方法_【新手必看】Python软件下载及安装教程

原标题:【新手必看】Python软件下载及安装教程 Python下载:免费开源 官网地址:https://www.python.org/downloads/ 下载对应版本Python:python-3.6.1-amd64.exe(我的电脑是window 7-64位),所以我…

如何下载linux历史版本下载,CentOS历史版本下载方法

实验室要求统一Linux版本,原来我用的是Ubuntu,现在我在的实验室是centos,我也就只能改了。实验室和个人不同,个人的Linux版本可能经常换,只要有新的版本出来,我就会去下载下来,在虚拟机里面试一…

table超出边框出现滚动条_精美横轴智能滚动条设计

如何设计一款精美的横轴智能滚动条?本文对设计过程进行了详细地介绍。页面布局页面设定新建一个页面文件,命名为【精美横轴智能滚动条设计】。在【精美横轴智能滚动条设计】页面内新建一个命名为【table】的动态面板。【底层背景】:从元件库内…

如何在python中安装matplotlib模块_Windows下为Python安装Matplotlib模块

这玩意反反复复弄了一晚上,这里详细叙述下如何安装,肯定会对大家有所帮助。首先默认大家都装了Python,这个从官网下基本不会有任何难度。 (1)Setuptools的安装 为啥先说这个,后面所有whl文件都要用这个安装…

马冬晗学习计划表_一年时间提升学习和工作能力,我做对了这3点

文 / 小椰子 昨晚和朋友去大排档吃宵夜,酒足饭饱之后,发现他两眼无神地盯着桌上的空啤酒瓶:“讲真,毕业后出来工作这一年多,我好几次想重新回去读书。”我诧异地看着他,静静地听他继续说下去。“现在的自己…

python编写递归函数、求斐波那契数列第n项_python使用递归求斐波那契数列中第n个数的值...

原博文 2019-11-29 16:33 − def byh(n): if n 1 or n 2: return 1 return byh(n-1) byh(n-2)print(byh(8)) #1,1,2,3,5,8,13,21,输出结果:21... 相关推荐 2019-12-12 14:08 − 使用range函数生成数值列表 使用range函数打印1~5的数字 for i in range(1,6): prin…

sqlsugar 批量删除guid类型主键_SAP使用MASS批量修改主数据

由于公司业务部门需要,向我提出的这个要求,我就在网上查了下,看到了一位知乎的前辈大神写了,自己测试了下把过程更详细的记录了一下,也挺好用,就在这里记录和分享一下,便于以后查看。业务场景&a…

kali linux 搜狗输入法,kali_Linux下安装搜狗输入法

1. 由于我的虚拟机里kali是32位,如果64位系统就找对应的安装包。依赖软件下载地址:http://http.kali.org/pool/main/f/fcitx/1 ) dpkg -i fcitx-libs_4.2.8.4-3~bpo701_amd64.deb2 ) dpkg -i fcitx-libs_4.2.8.4-3~bpo701_i386.deb3 ) dpkg -i fcitx-l…

python数据库操作sqlite_使用Python对SQLite数据库操作

原博文 2017-04-05 15:25 − SQLite是一种嵌入式数据库,它的数据库就是一个文件。由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中,甚至在IOS和Android的APP中都可以集成。 Python内置了SQLite3&…

多屏互动协议 linux,【Linux系统多屏互动电视】Linux系统多屏互动电视报价及图片大全-列表版-ZOL中关村在线...

对比所属:TCLE5690系列最大的特点就是搭载了当前彩电领域最高端、最火爆的4K UHD超高清面板。并采用MSTAR四核处理器和最新的Android4.2操作系统,确保了超高清信号从输入、到解码、到显示的全程超高清处理,确保最优化的4K超高清显示。产品定位…

python删除txt指定内容_python删除文件中指定内容

更多追问追答 追问 我按你的方法试了下,文件内容还在,没有删掉...... 追答 把你的 file.txt 贴出来,确保 20150723 在要删除行的最开始,前面不能有空格等其他任何字符。 另外, 原来的代码最后漏了一行lines [l for …

ad16自动布线设置规则_设计 | 18种pcb设计特殊布线的画法与技巧!

蛇形线方法Tool 里选 Interactive length tuning 要先布好线再改成蛇形, 这里用的是布线时直接走蛇形: 先 P->T 布线, 再 Shift A 切换成蛇形走线按 Tab 可设置属性, 类型了选用圆弧,Max Amplitude 设置最大的振幅 ,Gap 就是间隔(不知这么翻译对不) ,下面左边是…

c++ udp多线程 例子_计算机网络知识梳理(4)——TCP/UDP、TCP三次握手与四次挥手...

TCP/IP协议是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。通俗而言:TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而…

python max取下标_Python 变量类型总结

变量存储在内存中的值。这就意味着在创建变量时会在内存中开辟一个空间。基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中。因此,变量可以指定不同的数据类型,这些变量可以存储整数,小数或…

vue修改计算属性的值_Vue语法高级之计算属性和侦听器

计算属性和侦听器都可以监听到data区数据的变化,当数据变化时可以触发方法的调用,从而在方法内部可以进行相应的逻辑处理。计算属性的语法格式是:computed: {}侦听器的语法格式是:watch: {}一、计算属性计算属性一般是为了简化模板…

sqlserver查看索引_SQL Server页中行物理存储

SQL Server页有很多类型:1 – 数据页. 记录堆或者聚集索引叶子级的数据2 – 索引页. 用于保存聚集索引中的中间页和根页,或者非聚集索引的所有页3 – text mix page. A text page that holds small chunks of LOB values plus internal parts of text tr…

gin 怎么通过 post 发送结构体_Go Web 框架 Gin 实践12—优化配置结构及实现图片上传...

Go语言中文网,致力于每日分享编码、开源等知识,欢迎关注我,会有意想不到的收获!项目地址:https://github.com/EDDYCJY/go-gin-example如果对你有所帮助,欢迎点个 Star 前言一天,产品经理突然跟你…