Go诞生12年啦

前言

不知不觉,Go语言已经开源12年了。

日前,Go团队的Russ Cox在官方博客上发表了Go诞生12年的感想,回顾了2021年发布的Go 1.16版本和Go 1.17版本的改进,Go周边工具集的强大功能。展望2022年,Go 1.18版本会正式引入泛型,这也是Go团队2022年的主要工作聚集点。

本人针对Russ的原文做了一个翻译,以飨读者。

原文翻译

谷歌Go团队Russ Cox

2021.11.10

今天是我们庆祝Go语言开源12年的日子。今年我们做了相当多的工作,同时明年也有非常多值得期待的事情会发生。

大家看这篇博客可以感受到的最明显的变化就是我们对go.dev网站做了改版,力求把我们诸多分散的Go站点打造成一个风格一致的统一站点。同时,我们启用pkg.go.dev域名替换了godoc.org。

在今年2月,我们发布了Go 1.16版本。Go 1.16版本做了如下修改:

  1. 支持macOS ARM64处理器架构
  2. 增加了一个文件系统接口
  3. 增加了embeded包
  4. 默认开启modules
  5. 一些其它改进和优化

在今年8月,我们发布了Go 1.17版本。Go 1.17版本做了如下修改:

  1. 支持Windows ARM64处理器架构
  2. 优化TLS加密套件
  3. 引入修剪版本的module依赖图,使得大型项目中的module使用更加高效
  4. 新增可读性更强的编译限制语法
  5. 在底层实现上,针对x86-64体系架构的Go函数,Go 1.17使用了基于寄存器的调用约定。将CPU密集型的应用程序的性能提升了5%-15%。

2021年,我们发表了很多新的教程,包括"Go编程中数据库使用指引"、“Go modules开发指引”和“Go modules参考指引”等等。其中一个吸引较多人关注的教程是"如何使用Go和Gin框架开发Restful API",在Google Cloud Shell上可以通过交互操作进行体验。

同时,我们也一直忙于Go的IDE开发,包括如下几点:

  1. 在VS Code Go插件中默认启用gopls。
  2. 针对gopls和VS Code Go发布了数不清的改进和优化,包括Go调试器Delve带来的强大的调试功能和体验。

此外,我们启动了Go fuzzing的beta版本计划,并且官方提出了给Go语言增加泛型设计的想法。这2个部分预期都会在Go 1.18里发布。

秉持线上优先的原则,Go团队主持了第二届谷歌开源直播Go语言主题日。你们可以在YouTube上查看到以下分享。

  • "在Go中使用泛型"--- Ian Lance Taylor,介绍了泛型设计以及如何有效使用泛型。
  • "现代企业应用"--- Steve Francia,分享现代企业应用中Go扮演的角色。
  • "使用Go编辑器打造更好的项目"---Suzy Mueller,展示VS Code Go插件如何帮助你做代码导航、调试、测试以及其它更多的技巧。
  • "从概念到生产"---Benjamin Cane(美国运通杰出工程师),解释了美国运通如何使用Go来开发支付和奖励平台。

展望未来

我们非常期待Go语言发展的第13个年头里会给大家带来什么样的惊喜。下个月,我们会在GopherCon 2021会议上做以下2个分享,同时这个会议也邀请了Go社区里非常杰出的讲师。欢迎大家免费注册,设置日历提醒!

  • "为什么要使用Go泛型以及怎么样使用Go泛型"---Robert Griesemer和Ian Lance Taylor。他们领导了Go泛型的设计和实现。

    12.8 11:00 AM(美国东部时间)。

  • "使用调试适配协议(DAP)来调试Go代码"---Suzy Mueller,分享如何使用VS Code Go的高级调试功能。

    12.9 3:20 PM (美国东部时间)。

在明年2月,Go 1.18版本计划做如下更新:

  • 扩展新的基于寄存器的调用约定到非x86体系架构上,大幅提升Go的性能。
  • 支持新的Go Fuzzing功能。
  • 作为第一个支持泛型的正式发行版本。

泛型会是我们团队2022年的主要聚焦点之一。在Go 1.18里发布的泛型只是一个开始,我们需要花时间来使用泛型,研究我们的泛型设计里哪些是有用的,哪些是无用的。这样我们才能写出最佳编程实践,也才能决定我们应该把泛型里的哪些内容加到标准库和其它库里。我们预期Go 1.19(计划2022年8月发布)和之后的版本会进一步重新设计和实现泛型,并且把泛型进一步集成到Go的总体编程设计体验里。

2022年的另一个聚焦点是Go的供应链安全。我们已经讲了持续数年的Go依赖问题,Go modules虽然提供了可重复、可验证和经过验证的构建,在一定程度上解决了这个问题,但是仍然还有很多工作要做。从Go 1.18版本开始,go命令会嵌入更多的编译配置信息到二进制文件里,既可以让Go module的可重复性更容易实现,也可以帮助需要生成SBOM(Software Bill of Materials)的项目。此外,我们已经开始搭建Go漏洞数据库和用于报告Go程序依赖里的漏洞的工具。这项工作的目标之一就是大幅提升这类工具的信噪比:如果一个程序没有使用有漏洞的函数,那我们就不需要报告它。在2022年的规划里,我们计划把这个漏洞检测和报告工具打造成一个独立的工具,同时也把它引入到现有的工具和pgkg.go.dev网站上,包括glps和VS Code Go插件都会引入这个工具。当然,要提升Go供应链安全的其它方面,还有很多工作要做,请大家保持关注。

总体而言,我们期望2022年会是Go的一个大年,我们会继续发布及时的版本更新和大家所期望的功能改进。

谢谢大家

Go语言发展到现在不仅仅是靠Google的Go团队,还要感谢大家的帮助,让Go能够成功。也希望大家和我们一起,加入到Go语言的冒险历程里来。Go团队希望大家一切顺利!

References

  • 英文原文:https://go.dev/blog/12years

附言

欢迎大家关注微信公众号:coding进阶。本公众号将持续分享以下内容:

  1. Go语言基础
  2. Go编程实战
  3. Go设计原理
  4. Go常见的坑
  5. Go版本迭代
  6. Go面试题集锦
  7. Go重要外文翻译
  8. 分布式系统架构

一起进步!

本文由博客一文多发平台 OpenWrite 发布!

Go语言开源12年---Go Team感言相关推荐

  1. Jeff Dean:一年开源12款新工具,谷歌负责任AI原则落地生根

    https://www.toutiao.com/a6707804358597149191/ [新智元导读]自从谷歌宣布AI原则开始,已经过了一年时间.如今Jeff Dean和Kent Walker对原 ...

  2. 最值得阅读学习的 10 个 C 语言开源项目代码

    本文转载于: 最值得阅读学习的 10 个 C 语言开源项目代码 从扩展思路的角度来说,一个程序员应该好好读过这样一些代码: 一个操作系统内核 一个编译器(如:gcc,lua) 一个解释器(如:pyth ...

  3. ios c语言头文件,iOS开发 -- C语言基础12(预处理指令)

    iOS开发 -- C语言基础12(预处理指令) 宏定义 预处理指令简介 1.C语言在对源程序进行编译之前,会先对一些特殊的预处理指令作解释(比如之前使用的#include文件包含指令),产生一个新的源 ...

  4. C/C++语言开源库

    C/C++语言开源库 Webbench Tinyhttpd cJSON CMockery Libev Memcached Lua SQLite UNIX v6 NETBSD 标准库 框架 人工智能 异 ...

  5. c语言省二历年真题讲解安徽,安徽省计算机等级二考试真题C语言年12月.doc

    安徽省计算机等级二考试真题C语言年12月 机密☆启用前 二〇一三年下半年全国高等学校(安徽考区) 计算机水平考试试卷 (二级 C语言程序设计) 考生须知: 1.请将准考证号末两位填在试卷第2页右上方的 ...

  6. C语言第12轮:指针

    C语言第12轮:指针 [学习目标] 1.        指针 2.        指针与数组 A: 指针的概念 内存存储单元按字节排序.每一个字节编有序号.我们称之为地址.因为能够通过地址就能够找到所 ...

  7. 10大Go语言开源项目推荐

    关注公众号 风色年代(itfantasycc) 300G微服务资料等你拿! Go语言诞生5周年!10大Go语言开源项目推荐 - Go语言中文网 - Golang中文社区 引用 2014年11月,Gol ...

  8. 优秀的 Spring Boot 语言开源项目

    优秀的 Spring Boot 语言开源项目,涵盖了企业级系统框架.文件文档系统.秒杀系统.微服务化系统.后台管理系统等各个方面 Spring Boot 中文索引 项目名称 分布式敏捷开发系统架构 项 ...

  9. python语言基础知识点总结_Python语言的12个基础知识点小结

    Python语言的12个基础知识点小结 python编程中常用的12种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序.去重,字典排序,字典.列表.字符串互转,时间对象操作,命令行参数解析(g ...

最新文章

  1. 小米 samba linux,不折腾会死:CentOS7访问小米路由(Samba服务)
  2. php vsftpd文件上传类,php ftp文件上传函数(基础版)
  3. 直播 | UCLA博士生洪逸宁:视觉和语言的联合语法归纳(ICCV 2021)
  4. halcon直线标定板对相机标定的效果评估(对比矫正前后、对比标定板矫正效果)
  5. 1.单机部署hadoop测试环境
  6. LeetCode 103. 二叉树的锯齿形层次遍历(BFS / 双栈)
  7. hadoop hbase java_Hadoop、Hbase伪分布式安装
  8. c语言八数码A星算法代码解析,八数码问题c语言a星算法详细实验报告含代码解析...
  9. Codeforces Beta Round #1:B. Spreadsheets
  10. maven执行package命令解析配置文件中的占位符进行替换
  11. LINUX编译OpenJDK8:cc1plus: all warnings being treated as errors
  12. Spring Boot过滤器和拦截器详解
  13. 技巧:删除桌面上提示找不到该项目的文件
  14. fileman命令的帮助+?
  15. 强化学习DQN 入门小游戏 最简单的Pytorch代码
  16. FPGA入门实验-基于状态机实现4位共阴极数码管显示超声波模块读数
  17. 串口工具Kermit
  18. MySql模糊查询like通配符的使用
  19. HCIE 面试资料-IPv6
  20. 工程伦理 第一章习题 答案

热门文章

  1. 华为手机无法安装apk
  2. STM32双机SPI全双工通信
  3. 如何提升自己编写软件需求文档能力
  4. Deep Dream 模型
  5. 基于多软件的STK模型转换应用研究
  6. 金山软件重组网游管理团队 五虎将首次公开亮相
  7. win10如何永久关闭数字签名
  8. flowable部署流程
  9. 【VTK】VTK删除三维模型指定三角形面片
  10. 速卖通产品编辑中使用html,速卖通新手注意了,教你怎么上传产品