Go 语言的 13 年


今天我们庆祝 Go 开源版本的十三岁生日。 Gopher 已经是一个青少年啦!

对于 Go 来说,今年是具有里程碑的一年。最重要的事件是 3 月的 Go 1.18的发布,它带来了许多改进,但最引人注目的是 Go 工作区、模糊测试和泛型。

工作区使你可以很容易地同时处理多个模块,当你维护一组相关的模块并在它们之间有模块依赖关系时,这是最有用的。要了解工作区,请看 Beth Brown 的博文《熟悉工作区》和《工作区指南》。

模糊测试是go test 的一个新功能,它可以帮助你找到你的代码不能正确处理的输入:你定义一个模糊测试,对任何输入都应该是通过的,然后模糊测试在代码覆盖率的指导下尝试不同的随机输入,试图使模糊测试失败。在开发对任意(甚至是攻击者控制的)输入都不出错的、鲁棒性的代码时,模糊测试尤其好用。要了解更多关于模糊测试的信息,请参阅教程《模糊测试入门》和《模糊测试指南》,并留意 Katie Hockman 的 GopherCon 2022 演讲 “Fuzz Testing Made Easy”,该演讲即将上线。

泛型,很可能是 Go 最受欢迎的功能,它为 Go 增加了参数多态性,使编写的代码可以适用于各种不同的类型,但在编译时仍然是静态检查。要了解更多关于泛型的信息,请看教程《泛型入门》。更多详情请见博文《泛型简介》和《何时使用泛型》,或 2021 年 Google 开源现场 Go Day 的讲座”在 Go 中使用泛型”,以及 2021 年 GopherCon 的”泛型!”,由 Robert Griesemer 和 Ian Lance Taylor 撰写。

与 Go 1.18 相比,8月发布的 Go 1.19 是一个相对平静的版本:它侧重于完善和改进 Go 1.18 引入的功能,以及内部稳定性改进和优化。Go 1.19 的一个明显变化是增加了对 Go 文档注释中的链接、列表和标题 的支持。另一个变化是为垃圾收集器增加了一个软内存限制,这在容器工作负载中特别有用。关于最近垃圾收集器的改进,请参见 Michael Knyszek 的博文《Go 运行时间:4年后》,他的演讲《Respecting Memory Limits in Go》,以及新的《Go垃圾收集器指南》。

我们一直致力于使 Go 开发能够优雅地扩展到更大的代码库,特别是在 VS Code Go 和 Gopls 语言服务器方面的工作。今年,Gopls 的发布侧重于提高稳定性和性能,同时提供对泛型的支持,以及新的分析和代码透镜。如果你还没有使用 VS Code Go 或 Gopls,请试一试。请参阅 Suzy Mueller 的讲座”用 Go 编辑器构建更好的项目”以了解概况。作为奖励,在 VS Code中调试 Go在Delve的本地调试适配器协议支持下变得更加可靠和强大。试试 Suzy的”Debugging Treasure Hunt”!

开发规模的另一部分是项目中的依赖数量。在 Go 的 12 岁生日后一个月左右,Log4shell 漏洞为业界敲响了警钟,让大家认识到调用链安全的重要性。Go 的模块系统就是专门为此而设计的,它可以帮助你了解和跟踪你的依赖关系,识别你正在使用的具体依赖关系,并确定其中是否有已知的漏洞。Filippo Valsorda 的博文《Go 如何缓解调用链攻击》对我们的方法进行了概述。9月,我们在 Julie Qiu 的博文《Go 的漏洞管理》中预览了Go的漏洞管理方法。这项工作的核心是一个新的、经过整理的漏洞数据库和一个新的 govulncheck 命令,它使用先进的静态分析来消除大部分仅使用模块要求而产生的误报。

我们致力于了解 Go 用户的一部分是我们每年的年终 Go 调查问卷。今年,我们的用户体验研究人员也增加了一个轻量级的年中 Go 调查问卷。我们的目标是收集足够多的回复,以便在不对整个 Go 社区造成负担的情况下进行统计学意义上的调查。有关结果,请参阅 Alice Merrick 的博文《Go Developer Survey 2021 Results》和 Todd Kulesza 的文章《Go Developer Survey 2022 Q2 Results》。

随着世界上开始更多的旅行,我们也很高兴能在 2022 年的 Go 会议上见到你们中的许多人,特别是在 7 月柏林的 GopherCon Europe 和 10 月芝加哥的 GopherCon 上。上周我们举行了年度虚拟活动,谷歌开源现场的Go Day。以下是我们在这些活动中发表的一些演讲。

  • “How Go Became its Best Self”, by Cameron Balahan, at GopherCon Europe.

  • “Go team Q&A”, with Cameron Balahan, Michael Knyszek, and Than McIntosh, at GopherCon Europe.

  • “Compatibility: How Go Programs Keep Working”, by Russ Cox at GopherCon.

  • “A Holistic Go Experience”, by Cameron Balahan at GopherCon (video not yet posted)

  • “Structured Logging for Go”, by Jonathan Amsterdam at Go Day on Google Open Source Live

  • “Writing your Applications Faster and More Securely with Go”, by Cody Oss at Go Day on Google Open Source Live

  • “Respecting Memory Limits in Go, by Michael Knyszek at Go Day on Google Open Source Live

今年的另一个里程碑是在 Communications of the ACM 上发表了《Go编程语言和环境》,作者是 Russ Cox、Robert Griesemer、Rob Pike、Ian Lance Taylor 和 Ken Thompson。这篇文章由 Go 的原始设计者和实施者撰写,解释了我们认为是什么让 Go 如此受欢迎和富有成效。简而言之,Go 的工作重点是提供一个针对整个软件开发过程的完整的开发环境,并对大型软件工程工作和大型部署进行扩展。

在 Go 的第 14 个年头,我们将继续努力使 Go 成为大规模软件工程的最佳生态。我们计划特别关注调用链安全、改进的兼容性和结构化日志,所有这些都已经在这篇文章中提到了。此外,还将有大量的其他改进,包括配置文件指导下的优化。

感谢你!

Go 一直以来都远远超出了 Google 的 Go 团队的工作范围。感谢所有的人–我们的贡献者和 Go 社区的每个人–你们的帮助使 Go 成为今天成功的编程环境。我们祝愿你们在新的一年里一切顺利。

相关链接:

Gopher:https://go.dev/doc/gopher

Go1.18https://go.dev/blog/go1.18

熟悉工作区:https://go.dev/blog/get-familiar-with-workspaces

工作区指南:https://go.dev/ref/mod#workspaces

模糊测试入门:https://go.dev/doc/tutorial/fuzz

模糊测试指南:https://go.dev/security/fuzz/

泛型入门:https://go.dev/doc/tutorial/generics

泛型简介:https://go.dev/blog/intro-generics

何时使用泛型:https://go.dev/blog/when-generics

Go1.19:https://go.dev/blog/go1.19

注释列表标题支持:https://go.dev/doc/comment

软内存限制:https://go.dev/doc/go1.19#runtime

Go运行时间:4年后:https://go.dev/blog/go119runtime

Go垃圾收集器指南:https://go.dev/doc/gc-guide

在VS Code中调式Go:https://go.dev/s/vscode-go-debug

调式适配器协议:https://microsoft.github.io/debug-adapter-protocol/

Log4shell漏洞:https://en.wikipedia.org/wiki/Log4Shell

Go如何缓解调用链攻击:https://go.dev/blog/supply-chain

Go的漏洞管理:https://go.dev/blog/vuln

govulncheck命令

https://pkg.go.dev/golang.org/x/vuln/cmd/govulncheck

Go Developer Survey 2021 Results:

https://go.dev/blog/survey2021-results

Go Developer Survey 2022 Q2 Results:

https://go.dev/blog/survey2022-q2-results

Go Day:

https://opensourcelive.withgoogle.com/events/go-day-2022

A Holistic Go Experience:

https://www.gophercon.com/agenda/session/998660

Structured Logging for Go:

https://opensourcelive.withgoogle.com/events/go-day-2022/watch?talk=talk2

Writing···:

https://opensourcelive.withgoogle.com/events/go-day-2022/watch?talk=talk3

Respecting Memory Limits in Go:

https://opensourcelive.withgoogle.com/events/go-day-2022/watch?talk=talk4

Go编程语言和环境:

https://cacm.acm.org/magazines/2022/5/260357-the-go-programming-language-and-environment/fulltext

原文地址:

Thirteen Years of Go - The Go Programming Language

原文作者:

Russ Cox, for the Go team

本文永久链接:

https://github.com/gocn/translator/blob/master/2022/w45_thirteen_years_of_Go.md

译者:zxmfke

校对:pseudoyu


2022 GopherChina大会报名火热进行中!

扫描下方二维码即可报名参与

大会合作、现场招聘及企业购票等事宜请联系微信:18516100522

戳这里 Go !

Go 语言的 13 年相关推荐

  1. C语言字符型数组ppt,C语言第13讲指针与字符串(字符数组).ppt

    C语言第13讲指针与字符串(字符数组).ppt 6.2.3 指针与字符串(字符数组) C语言用字符数组存放字符串. 字符数组元素个数确定,一般用下标控制循环. 字符串有效字符个数由0确定,用结束符0控 ...

  2. c语言:13、指针与内存

    c语言:13.指针与内存 1.计算机中数据表示方式 进制 2.内存管理 操作系统的内存管理 3.变量和指针的本质 4.程序在内存中的debug 4.1.编写main.c 4.2.编译代码 4.3.gd ...

  3. 基于Verilog语言的13进制计数器设计

    基于Verilog语言的13进制计数器设计 `timescale 1ns / 1ps // // Company: // Engineer: // // Create Date: 2019/11/10 ...

  4. C语言常用13种算法附源码

    该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/105147802 常 ...

  5. C程序设计语言上机13,《高级语言程序设计》北大上机试题(十三)

    C语言上机试题:13 1.题目:编一C程序,其功能是能把读入一串英文单词(以单词end做为结束标记,单个单词字母数≤20),并按字典顺序输出.(注:可执行程序命名为e13_1.exe) 程序设计: # ...

  6. a的n次方的最后三位数c语言,求13的n次方(12n≤130000000000)的最后三位数,用c++编程...

    #include intmain() { longlonginti,x,y,last;/*变量last保存求X的Y次方过程中的部分乘积的后三位*/ //输入 while(scanf("%ll ...

  7. c语言求13为质数的代码,C语言求质数.doc

    C语言求质数 试编写一个程序,找出2->N之间的所有质数.希望用尽可能快的方法实现.[问题分析]: 这个问题可以有两种解法:一种是用"筛子法",另一种是从2->N检查, ...

  8. 河北外国语学院计算机学院汤智,重磅!河北外国语学院国际语言教育学院13名考研英雄凯旋!...

    考研是很多学生的奋斗目标,时代在变迁,大学文凭在竞争中已不占上风,许多人选择考研这条路来为自己争取更好的明天. 近日,喜讯频传!河北外国语学院国际语言教育学院2020届学前教育专业13名同学向学校发来 ...

  9. java转义字符_Java入门 - 语言基础 - 13.Character类

    1.概述 Character 类用于对单个字符进行操作. Character 类在对象中包装一个基本类型 char 的值 实例 char ch = 'a'; // Unicode 字符表示形式char ...

最新文章

  1. image caption优秀链接
  2. Nginx-Lua重定向系列
  3. java社区活跃度_Java并发编程-活跃度问题
  4. Axure原型设计导出到PDF文件
  5. vim编辑器的快捷键使用
  6. Android系统和内核编译命令
  7. 中国的量子软件无法再次失去三十年
  8. R数据分析:样本量计算的底层逻辑与实操,pwr包
  9. 计算机和音乐的联系,音乐和数学的联系
  10. TensorFlow笔记(6) 单神经元分类
  11. Redhat使用yum install时提示This system is not registered with an entitlement server 的解决办法
  12. MIUI12系统怎么样开启Root超级权限的流程
  13. web 使网站在浏览器中全屏显示 fullscreen=yes
  14. python点击按钮后跳到另一个页面_js点击button按钮跳转到另一个新页面
  15. 202130310164
  16. 华为应用市场,浏览器PC版
  17. 手机如何实现边有线上网边充电?
  18. .class .class 和 .class.class 和 .class>.class 比较
  19. Thread优先级之优先级别
  20. vue路由之路由的两种模式

热门文章

  1. 上海:PUE大于1.7小老散旧数据中心关停并转
  2. java毕业生设计高校教学资源系统计算机源码+系统+mysql+调试部署+lw
  3. 解决Linux ubuntu下SSH无法连接的问题
  4. Phython基础语法知识点汇集
  5. mpvue,koa开发微信小程序(二)网络请求相关
  6. python turtle 绘图小猪佩奇_Python turtle画小猪佩奇
  7. 基于AR谱特征的声目标识别
  8. 通过串口号获得该串口号对应的设备信息(如设备范例ID等)
  9. #物联网感知实验#proteus仿真入门
  10. 为什么建议大家用 Linux 开发?爽啊!