当前位置: 首页 > news >正文

Go团队的工作方式

在Go 1.23版本[1]即将发布(2024.8)之前,在GopherCon 2024[2]开幕(2024.7)之前,Go团队成员Cameron Balahan(Go产品负责人)[3]、 Sameer Ajmani(Go团队工程总监)和Russ Cox(Go团队技术负责人)[4]参加了业界知名的播客栏目GoTime[5]的最新一期活动,主题是“How things get done on the Go Team”[6]。在这期活动中,Go团队这三个leader分享了Go团队的工作方式,包括:Go团队的组成、现状与职责划分、与社区互动、决策与规划流程、产品管理等方面。这里基于这期播客的脚本[7]提炼了其中主要的观点,贴到这里供大家参考。

1. Go团队组成及职责划分

Go团队从2007年诞生,至今已经有17年了。最初的Go团队由罗伯·派克(Rob Pike)、罗伯特·格瑞史莫(Robert Griesemer)和肯·汤普森(Ken Thompson)三个Go语言之父组成。之后Russ Cox和Ian Lance Taylor加入团队,形成了Go团队最核心的五人组。

Sameer Ajmani在Go 1.0发布前后加入,当时团队有10几个人,我们熟悉的context包[8]就是由他和Russ Cox一起设计并实现的。

Cameron Balahan在4年前加入Go团队,他也是今年在Google I/O大会上做“Go是一个平台”演讲的Go团队成员。

目前Google内部组织调整后,Go团队划归Google云团队管理,但其工作相对独立。现在,Go团队由不同小组组成,主要包括三个小组:核心组、工具组和安全组。核心组负责编译器、运行时、链接器以及核心发布流程。工具组负责构建系统、Go命令、Go VSCode IDE插件[10]以及gopls语言服务器[11]等。安全组则专注于Go的供应链安全性[12]、漏洞扫描和修复[13]等方面。

尽管划分了不同的小组,但Go团队在日常工作中感觉就像是一个整体,各小组之间合作紧密。特定任务往往需要几个小组共同参与,例如漏洞检测与修复功能的开发就涉及了核心组、工具组和安全组的工作。

Go团队的工作由核心成员和开源社区两部分组成。核心成员负责构建整体框架与关键功能,而开源社区则为Go语言贡献众多细节上的改进和完善。两者紧密互动,形成良性循环。

2. Go团队与Go社区的互动

Go社区对语言发展做出了重大贡献,因此Go团队始终采取非常积极开放的态度与社区互动。包括但不限于使用Slack、邮件列表、Issue跟踪、Go博客等多种渠道倾听Go社区声音,接纳Go社区贡献。任何人都可以参与讨论并提出建议。

目前较为正式的决策途径是“Go提案流程(Proposal Process)[14]”。任何人都可以在这一平台上提出建议,供Go团队和全体社区评议。不论大小,只要通过审议,这些建议都可能被纳入语言或生态系统的未来发展规划。

除了直接参与讨论和决策外,Go社区还可以通过编写代码、发现并报告漏洞等方式为Go语言做贡献。Go团队会将高质量的外部代码整合进官方发行版。

3. 决策与规划流程

Go团队在做决策时,会优先考虑目标的一致性[15]和充分的信息共享(比如公开利用Go遥测工具[16]采集的数据)。如果出现分歧,通常是由于目标不一致或信息不对称(以类型别名加入Go的过程为例[17])造成的。因此,团队会先明确共同目标,并确保每个人掌握了相同的信息,然后再做出决策。

在规划过程中,Go团队首先要考虑Go语言既定的目标,即能够同时处理"生产规模化"(大量机器与海量数据)和"人力规模化"(大型项目与众多贡献者)。任何需要持续10年以上的重大决策,都必须符合这两个目标。

从长远来看,安全性与开源软件的可持续发展是Go团队需要重点关注的问题。他们将积极主导新标准与新模式,以提高整个行业的供应链安全性水平。

功能规划上,Go团队会同时考虑Go用户/社区和Google内部需求:Go用户和Go社区从Go中寻找价值,比如高生产力、高性能、高可靠和高安全;Google要确保其内部系统运行良好,开发人员满意,其系统可靠,安全,诸如此类。当然,Google也希望外部Go开发人员也这样做。同时,Google也希望那些外部的Go开发人员获得成功和快乐。为此,Go团队会寻求双赢解决方案。比如兼容性工作就是为了满足Kubernetes等重要系统的需求(IP地址解析)。在新特性开发过程中,Go团队会确保功能在整个生态链上保持一致性。

在发布规划上,Go团队需要考虑两个周期,一个是Go团队公开的Go版本发布周期[18],主版本一年两次。同时,Go团队leader还要考虑内部Google的规划周期,往往有一个年度计划周期,Go团队在其中执行 OKR、目标和关键结果。

4. 产品管理与Go的未来展望

作为Go产品负责人,CAMERON BALAHAN认为他会从优先级路线图、愿景角度以及Go团队为用户/社区和Google提供的价值的角度来弄清楚Go是什么,他认为Go是用于开发生产级软件的高效平台。作为编程语言,Go语言的产品管理理念就是构建一个高效且稳定的平台,支撑"生产级软件的高效开发"。

Go在解决云问题方面非常成功。云的大部分基础设施都是用Go编写的,并且Go在这方面做得很好,具有独特优势。Go团队希望Go在这一领域能够提供持续性的方案并取得持续性的成功,这决定了Go团队关注两个核心要素:生产效率和软件质量,这其中包括可靠性、安全性等重要的要素。

此外,Sameer认为人工智能的发展也为Go带来了新的机遇,随着越来越多的大公司、企业和初创公司希望在人工智能模型之上构建系统,而如何使Go成为构建智能基础设施以及基于大模型构建生产级、值得信赖、可靠的AI应用系统的语言,是下一个重要的前沿领域,Go团队将看到对此的大量需求,并认为Go是一个非常合适的选择。Go团队也在拭目以待!

编程语言的采用是一个缓慢的过程。Go语言目前已经到了一个关键的增长点,有望在新兴计算领域(AI)获得更广泛的使用。团队需要持续关注新的计算范式,及时调整以满足新需求。

Go社区对该语言的热爱是Go发展的重要动力。整个Go社区都是建立在Go之上的。Go团队本身无法建造所有东西,Go团队只要确保Go用户能够使用Go构建他们需要构建的东西,积极赋能社区发挥创造力,丰富Go的生态系统,才能继续让Go保持在人们需要的那种前沿,以便建立他们的业务、构建软件、构建他们需要的东西,生产级的高效、安全与可靠。

5. 不受欢迎的观点(GoTime常设环节)

  • Sameer:context is fine。

  • Cameron:I really like Go’s error handling.

  • Russ:null pointers are fine. They’re kind of a fundamental fact of computers, is that memory can be zeroed.


Gopher部落知识星球[19]在2024年将继续致力于打造一个高品质的Go语言学习和交流平台。我们将继续提供优质的Go技术文章首发和阅读体验。同时,我们也会加强代码质量和最佳实践的分享,包括如何编写简洁、可读、可测试的Go代码。此外,我们还会加强星友之间的交流和互动。欢迎大家踊跃提问,分享心得,讨论技术。我会在第一时间进行解答和交流。我衷心希望Gopher部落可以成为大家学习、进步、交流的港湾。让我相聚在Gopher部落,享受coding的快乐! 欢迎大家踊跃加入!

a4d958be9dd36825b78a63a347481659.jpeg36af5850f89f732714d3f54939e59059.png

dcde02c85f787898ec064a861aaa8212.pngb07dc5b12af0b84581ab9cd001af24be.jpeg

著名云主机服务厂商DigitalOcean发布最新的主机计划,入门级Droplet配置升级为:1 core CPU、1G内存、25G高速SSD,价格5$/月。有使用DigitalOcean需求的朋友,可以打开这个链接地址[20]:https://m.do.co/c/bff6eed92687 开启你的DO主机之路。

Gopher Daily(Gopher每日新闻) - https://gopherdaily.tonybai.com

我的联系方式:

  • 微博(暂不可用):https://weibo.com/bigwhite20xx

  • 微博2:https://weibo.com/u/6484441286

  • 博客:tonybai.com

  • github: https://github.com/bigwhite

  • Gopher Daily归档 - https://github.com/bigwhite/gopherdaily

957b33b6616e8d98c7bf7475c360d8c4.jpeg

商务合作方式:撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。

参考资料

[1] 

Go 1.23版本: https://tonybai.com/2024/05/30/go-1-23-foresight/

[2] 

GopherCon 2024: https://www.gophercon.com/

[3] 

Cameron Balahan(Go产品负责人): https://tonybai.com/2024/05/19/what-the-go-team-think-go-is/

[4] 

Russ Cox(Go团队技术负责人): https://swtch.com/~rsc/

[5] 

GoTime: https://changelog.com/gotime

[6] 

“How things get done on the Go Team”: https://changelog.com/gotime/318

[7] 

这期播客的脚本: https://github.com/thechangelog/transcripts/blob/master/gotime/go-time-318.md

[8] 

context包: https://tonybai.com/2022/11/08/understand-go-context-by-example

[9] 

Go是一个平台: https://tonybai.com/2024/05/19/what-the-go-team-think-go-is

[10] 

Go VSCode IDE插件: https://code.visualstudio.com/docs/languages/go

[11] 

gopls语言服务器: https://github.com/golang/tools/tree/master/gopls

[12] 

Go的供应链安全性: https://tonybai.com/2022/03/14/software-supply-chain-security-in-go

[13] 

漏洞扫描和修复: https://tonybai.com/2022/09/10/an-intro-of-govulncheck

[14] 

Go提案流程(Proposal Process): https://github.com/golang/proposal#the-proposal-process

[15] 

目标的一致性: https://tonybai.com/2023/12/10/go-changes/

[16] 

Go遥测工具: https://telemetry.go.dev/

[17] 

以类型别名加入Go的过程为例: https://github.com/golang/go/issues/18130

[18] 

Go版本发布周期: https://go.dev/wiki/Go-Release-Cycle

[19] 

Gopher部落知识星球: https://public.zsxq.com/groups/51284458844544

[20] 

链接地址: https://m.do.co/c/bff6eed92687

相关文章:

  • 第一章 通信系统基本概念
  • 网络安全和信息安全
  • Python编程技巧:如何正确使用with语句(Python中with用法详解)
  • PostgreSQL与MySQL的区别探究
  • 上海媒体邀约的类型有哪些?分行业精准邀约
  • GitHub上狂揽62Kstars的程序员做饭指南
  • WPF 深入理解一、基础知识介绍
  • 华为HDC开发者大会鸿蒙进展超预期
  • Mac 安装依赖后依旧报错 ModuleNotFoundError: No module named ‘Crypto‘
  • CSS背景属性:打造丰富视觉效果的背景设计
  • 打造坚固的SSH防护网:端口敲门入门指南
  • 【SPSS】基于RFM+Kmeans的电商客户价值聚类分析
  • 【Unity Shader】片段着色器(Fragment Shader)的概念及其使用方法
  • 【QT】实现无边框窗口+可拖动+可调整大小
  • TCP与UDP_三次握手_四次挥手
  • [PHP内核探索]PHP中的哈希表
  • [deviceone开发]-do_Webview的基本示例
  • const let
  • JDK 6和JDK 7中的substring()方法
  • Markdown 语法简单说明
  • Python_网络编程
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • Vue学习第二天
  • 番外篇1:在Windows环境下安装JDK
  • 机器学习中为什么要做归一化normalization
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 以太坊客户端Geth命令参数详解
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • 1.Ext JS 建立web开发工程
  • UI设计初学者应该如何入门?
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • #QT(串口助手-界面)
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (补)B+树一些思想
  • (代码示例)使用setTimeout来延迟加载JS脚本文件
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (一)Dubbo快速入门、介绍、使用
  • (转)Sql Server 保留几位小数的两种做法
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .NET Core 通过 Ef Core 操作 Mysql
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .NET Project Open Day(2011.11.13)
  • .Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)
  • .pings勒索病毒的威胁:如何应对.pings勒索病毒的突袭?
  • .vimrc 配置项
  • ??javascript里的变量问题
  • @autowired注解作用_Spring Boot进阶教程——注解大全(建议收藏!)
  • @Pointcut 使用
  • []串口通信 零星笔记