Go团队:Go是什么

2024年的Google I/O大会[1]如期而至。

这届大会的核心主旨毫无疑问是坚定不移的以AI为中心:Google先是发布了上下文长度将达到惊人的200万token的Gemini 1.5 Pro[2],然后面对OpenAI GPT-4o的挑衅,谷歌在大会上直接甩出大杀器Project Astra[3],视觉识别和语音交互效果,跟OpenAI的GPT-4o[4]不相上下;接着,谷歌又祭出文生视频模型Veo[5]硬刚Sora,效果酷炫,时长超过1分钟,打破Sora纪录。最后Google CEO劈柴宣布:谷歌搜索将被Gemini重塑,形态从此彻底改变!用户不再需要自己点进搜索结果,而是由多步骤推理的AI Overview[6]来代办一切。

3d1f1538a03d53ff2f1635154fad4aa3.png

不过,除了AI之外,Google在移动、Web和Cloud几个平台方面也为开发者带来了诸多精彩的内容,这其中就包括由Google Cloud团队带来的“Profile-guided optimization with Go”[7]的演讲:

42c53c66f17c67bd74440052b5c95f1c.png

注:目前,Go团队已归入Google Cloud团队管理。

该演讲由Cameron Balahan、Michael Pratt和James Ma三个人共同完成。其中长相颇似电影“源代码”[8]主角杰克·吉伦哈尔的Cameron Balahan在演讲中首先登场,阐述了Go团队眼中的Go究竟是什么

2022年,美国计算机学会通讯(Communications of the ACM)[9]期刊2022年5月第65卷第5期将发表了一篇有关Go语言的综述类Paper:《Go编程语言与环境》[10],这篇文章由Russ Cox,Robert Griesemer,Rob Pike,Ian Lance Taylor和Ken Thompson等Go团队的大佬联合撰写,对10多年来Go演化发展进行了复盘,深入分析了那些对Go的成功最具决定性的设计哲学与决策,这算是Go团队第一次阐述Go究竟是什么。

而Cameron Balahan这次的演讲算是Go团队加入Google Cloud后对Go未来定位和演进上的一次说明,虽然简短,但对Gopher们也极具参考意义。在这篇文章中,我们就来看看Cameron Balahan所代表的的Go团队对Go语言的观点。

Go是构建生产系统的高效平台

Go团队认为的第一点,也可能是最重要的一点是:Go不仅仅是一种编程语言,它是一个完整的端到端构建生产系统的平台。这一直都是Go团队的愿景。Go从一开始就是为了在规模化的实际软件工程中提供便利[11]。并且,Go团队在Google内部将该愿景简化成了下面幻灯片中的使命陈述:Go提供了构建生产系统的最高效平台。

92784e38d1c7c31a27ae58418e24c805.png

说Go很高效(Go is productive),是因为Go易于学习和维护,并且可以在团队之间扩展(scale)。

说Go是一个平台(Go is a platform),是因为它不仅仅是一种语言,它是一种端到端的开发者体验,包括IDE集成,构建和部署工具,监控工具,运行时工具,漏洞扫描等等,这些都是开箱即用的。

说Go是生产就绪的(Go is production ready ),是因为它可靠(reliable)、高效(efficient)、稳定(stable)和安全(secure),这就是为什么大家会在企业中看到它的身影的原因,尤其是在关键业务系统和基础设施中,遍布整个云计算领域。实际上,这也是现代云计算本身建立在Go之上的原因。这并不仅仅指Google Cloud,我指的是所有主要的云服务提供商以及所有其他主要的参与者以及云工具和技术。

Go的无限双循环

df2d2aa263d13d87686985caeb86155d.png

无限双循环是一个很好的思考更广泛的软件开发生命周期的方式。左边的循环是内部开发循环,也就是大家编写代码的地方。你迭代地很快,寻求快速反馈和高效率。而右边的循环可以看作是外部循环,你已经部署了你的代码到生产中,你要监控和操作它。

因此,当Go团队将Go作为一个平台来考虑时,他们将考虑如何端到端地解决这整个过程,包括内部和外部循环。Cameron下面基于这个循环从developer velocity(开发人员效率)、security(安全)和performance(性能)等方面分别举一些Go如何解决这些问题的例子。

developer velocity(开发人员效率)

427e4a107e6bc033dd32702754d5ea59.png

Go有一些旨在为了最大化你团队的开发人员效率的语言特性、工具和库。包括了从编写代码到将其推送到生产,再到之后可靠运维的整个过程。

Go团队提供IDE集成,包括为Visual Studio Code开发的插件,使其能够轻松利用其余工具链的特性。Go还提供了强大的并发模型,通过Goroutine实现。Go有内置的格式化工具、内置的测试框架和内置的调试器。Go编译器本身构建静态独立二进制文件,不依赖任何系统范围的依赖项或单独的运行时,这使得部署比其他语言更容易、更安全、更快。这是一种端到端的解决方案,用于获取和维护开发人员效率。

security(安全)

0d0a1db6eb256ebb8ca6eaa4ff7eee82.png

Go在安全性方面是领先者,这一点Go也是端到端解决的。如果你在关注最新的XZ软件供应链攻击新闻,你就会知道这是多么重要,也许比以往任何时候都更重要。这是Go团队非常重视的一个领域,因为他们已经看到在其他语言生态系统中,当一个流行的依赖项被破坏时会发生什么。

由于Go被用于云中所有这些关键基础设施,Go团队认识到安全性是Go应该提供的最重要的功能之一。从依赖管理系统开始,Go先后有了Go Module Mirror、Checksum Database和pkg.go.dev网站,它们都会警告你所依赖的库是否被篡改或遭受已知漏洞。

此外,Go的IDE集成很深入。如果你使用Go的VS Code插件,你会在IDE中就收到关于依赖项中的漏洞警告,包括你是否实际上从代码中调用了这些漏洞。这样,在真正依赖它们进入生产环境之前,你就知道了依赖项的安全态势。Go也是唯一一种将模糊测试[12]内置并集成到其工具链中的主流语言。模糊测试就像一种自动化的测试类型,它会智能地操纵你程序的输入,以找出bug和漏洞。

最后,Go有兼容性承诺,从Go 1.0开始就确保没有破坏性更改。这意味着升级很容易,这使保持最新的安全修复变得容易,跟上增强功能也很容易。去年在Go 1.21[13]中,Go团队在此基础上增加了向前和向后兼容性特性[14]。Go团队确实将兼容性视为不仅仅是一种便利,更是一种关键的安全特性。

performance(性能)

5cead13239384dfc1aaf72fe6982fd18.png

Go的标准库功能丰富且健壮,并针对性能进行了优化。你可以真正构建任何东西,而无需导入一些重型库或框架。Go还有一个自我调优的垃圾收集器。如果你曾经花时间为Java调优垃圾收集器,你就会知道这简直就像是一份全职工作。它可能需要耗费的时间和你最初编写代码一样长。在Go中,垃圾收集器开箱即用,运行高效,并会自动调整以适应你的工作负载需求。 当然,还有Profile Guided Optimization(PGO)[15],使用过PGO的开发者都很喜欢它。有些开发者甚至已经看到了令人印象深刻的性能提升。

开箱即用(out of the box)

5f0626021142200464cdc8852ed6ac52.png

图片中所有这些特性都符合开箱即用的端到端解决方案这一框架,正是这使Go成为构建生产系统最高效的平台。

Go团队在做所有这些的同时,也获得了来自用户的非常出色的反馈。大部分Go用户真的很喜欢Go。我们在调查中一直看到这一点,客户满意度水平(93%)实际上在业内是罕见的。

Go特性与客户价值定位

1925427d3510b0c4db6ab14118c1c24c.png

第一行可视为与生产力相关的内容。Go支持快速入门、快速迭代、快速构建真正可扩展的生产应用程序。所有这些都转化为你更快获得价值。

第二行是关于可靠性的,包括安全性、兼容性以及所有能够减少你长期维护和运维负担的内容。负担越小,你的总体拥有成本就越低,你就有更多时间和资源专注于推动业务增长的新事物。

第三行是关于云的。Go就像是为云量身定制的一样。Go启用的库、集成和架构都是为云而设计的,而不是后来才重新调整以适应云。因此,你将比使用其他语言时能更快更轻松地实现云的优势。

最后,Go用户是快乐的。他们无论在哪里都很开心。而且在Google Cloud上,他们尤其开心。每个人都喜欢开心的开发人员和运维人员。

小结

Google I/O 2024大会上Go团队代表对Go语言及其在软件工程领域的定位做了新的诠释:Go不仅是一种编程语言,更是一个端到端构建生产系统的高效平台

Go团队认为Go易学易维护,可扩展,同时可靠、高效、稳定和安全,适合在企业中使用,尤其是关键业务系统和基础设施领域。

文中介绍了将Go的愿景拆解为Go的"无限双循环"的理念。其中内循环侧重开发效率,外循环侧重可靠运维。Go在开发人员效率、安全性和性能等方面都有出色的解决方案。如IDE集成、并发模型、格式化工具、测试框架、调试器、静态部署等有助提高开发效率;依赖管理、漏洞扫描、模糊测试等确保安全性;垃圾回收、编译优化等提升性能。

此外,Go兼具快速入门、快速迭代、可扩展构建、安全可靠、低运维成本、云原生设计等特性,能让客户快速获得价值、降低总拥有成本、享受云优势,获得高客户满意度。Go可视为构建现代云基础设施的理想语言。


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

e3c5ea30595419792e787e561e3cb8a8.jpegee86c89c14995be67aaa2a1b64a9a0ea.png

8857979c7cffa83b5af12bf28bf98ea1.png677dae57b0f126f233aefdcd25611952.jpeg

著名云主机服务厂商DigitalOcean发布最新的主机计划,入门级Droplet配置升级为:1 core CPU、1G内存、25G高速SSD,价格5$/月。有使用DigitalOcean需求的朋友,可以打开这个链接地址[17]: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

ed79e71827f7ef6247e6f51807ab87cd.jpeg

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

参考资料

[1] 

Google I/O大会: https://io.google/2024/intl/zh/

[2] 

Gemini 1.5 Pro: https://deepmind.google/technologies/gemini/pro/

[3] 

Project Astra: https://deepmind.google/technologies/gemini/project-astra/

[4] 

OpenAI的GPT-4o: https://openai.com/index/hello-gpt-4o/

[5] 

文生视频模型Veo: https://deepmind.google/technologies/veo/

[6] 

AI Overview: https://developers.google.com/search/docs/appearance/ai-overviews

[7] 

“Profile-guided optimization with Go”: https://www.youtube.com/watch?v=FwzE5Sdhhdw

[8] 

电影“源代码”: https://movie.douban.com/subject/3075287/

[9] 

美国计算机学会通讯(Communications of the ACM): https://cacm.acm.org/

[10] 

《Go编程语言与环境》: https://cacm.acm.org//magazines/2022/5/260357-the-go-programming-language-and-environment/fulltext

[11] 

为了在规模化的实际软件工程中提供便利: https://go.dev/talks/2012/splash.article

[12] 

模糊测试: https://tonybai.com/2021/12/01/first-class-fuzzing-in-go-1-18

[13] 

Go 1.21: https://tonybai.com/2023/08/20/some-changes-in-go-1-21

[14] 

向前和向后兼容性特性: https://tonybai.com/2023/09/10/understand-go-forward-compatibility-and-toolchain-rule/

[15] 

Profile Guided Optimization(PGO): https://go.dev/doc/pgo

[16] 

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

[17] 

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

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

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

相关文章

第七节 ConfigurationClassParser 源码分析

tips: ConfigurationClassParser 是 Springframework 中的重要类。 本章主要是源码理解,有难度和深度,也枯燥乏味,可以根据实际情况选择阅读。 位置:org.springframework.context.annotation.ConfigurationClassPars…

[LLM-Agents]浅析Agent工具使用框架:MM-ReAct

上文LLM-Agents]详解Agent中工具使用Workflow提到MM-ReAct框架,通过结合ChatGPT 与视觉专家模型来解决复杂的视觉理解任务的框架。通过设计文本提示(prompt design),使得语言模型能够接受、关联和处理多模态信息,如图像…

Multi-Attention Transformer for Naturalistic Driving Action Recognition

标题:用于自然驾驶行为识别的多注意力Transformer 源文链接:https://openaccess.thecvf.com/content/CVPR2023W/AICity/papers/Dong_Multi-Attention_Transformer_for_Naturalistic_Driving_Action_Recognition_CVPRW_2023_paper.pdfhttps://openaccess…

java读取shp文件,获取点位

Testvoid contextLoads() {System.out.println(System.currentTimeMillis());//1716516228057 1716516228798String zipFilePath "C:\\code\\risk\\risk_management_backend\\edatope-app\\src\\main\\resources\\新中心范围SHP导入模板.zip";String destDir &quo…

思科模拟器--06.单臂路由升级版--多端路由互连实验--24.5.20

实验图纸如下: 第0步: 先放置六台个人电脑,一台交换机和一台2911路由器(千兆路由器(G0开头的)) 接着,用直通线将 PC0的F0,PC1的F0分别和交换机的F0/0, F0/1连接 交换机的F0/3和路由器的G0/0连接 PC2的F0,PC3的F0分别和交换机的F0/4, F0/5连接 交换机的F0/6和路由器的G0/1…

电脑连接爱快iKuai软路由之后,网卡没有正常获取到IP,无法访问爱快路由管理页?

前言 上一次咱们说到在爱快控制台上设置/辨认lan口,设置完成之后,其他的一些设置就需要在爱快iKuai软路由的管理页面上设置。 有些小伙伴会发现,当电脑连接上爱快软路由的lan口之后,电脑并没有正常获取到ip,导致无法访…

JavaScript表达式和运算符

表达式 表达式一般由常量、变量、运算符、子表达式构成。最简单的表达式可以是一个简单的值。常量或变量。例:var a10 运算符 运算符一般用符号来表示,也有些使用关键字表示。运算符由3中类型 1.一元运算符:一个运算符能够结合一个操作数&…

【Arthas】阿里的线上jvm监控诊断工具的基本使用

关于对运行中的项目做java监测的需求下,Arthas则是一个很好的解决方案。 我们可以用来 1.监控cpu 现成、内存、堆栈 2.排查cpu飚高 造成原因 3.接口没反应 是否死锁 4.接口慢优化 5.代码未按预期执行 是分支不对 还是没提交? 6.线上低级错误 能不能不重启…

STL--set和multiset集合

set和multiset会根据特定的排序准则&#xff0c;自动将元素排序。两者不同之处在于multiset 允许元素重复而 set 不允许。如下图: 使用set或multiset&#xff0c;必须先包含头文件: #include <set>上述两个类型都被定义为命名空间std内的class template: namespace std…

亚马逊自养号测评:深入解析与搭建要求

在亚马逊这电商平台上&#xff0c;商品的评价对于卖家来说至关重要。为了提升商品的曝光率、排名、权重和销量&#xff0c;卖家们纷纷采用各种推广方式&#xff0c;其中&#xff0c;亚马逊自养号测评成为了越来越多卖家选择的一种有效方式。 亚马逊自养号测评&#xff0c;顾名…

分布式事务——9种解决方案的原理与分类

目录 一、概要1. 分布式事务的概念2. 分布式事务解决方案分类 二、常见的分布式事务解决方案1. 基础的 2PC&#xff08;二阶段提交&#xff09;1.1 核心思想1.2 简介1.3 主要特点1.3.1 优点1.3.2 缺点 2. 基础的 3PC&#xff08;三阶段提交&#xff09;2.1 核心思想2.2 简介2.3…

C语言/数据结构——每日一题(有效的括号)

一.前言 如果想要使用C语言来解决这道题——有效的括号&#xff1a;https://leetcode.cn/problems/valid-parentheses/description/我们必须要借用上一篇我们所讲的内容——栈的实现&#xff1a;https://blog.csdn.net/yiqingaa/article/details/138923750?spm1001.2014.3001.…

go routing 之 gorilla/mux

1. 背景 继续学习 go 2. 关于 routing 的学习 上一篇 go 用的库是&#xff1a;net/http &#xff0c;这次我们使用官方的库 github.com/gorilla/mux 来实现 routing。 3. demo示例 package mainimport ("fmt""net/http""github.com/gorilla/mux&…

react实现把pc网站快捷添加到桌面快捷方式

文章目录 1. 需求2. 实现效果3. 核心逻辑4. 完整react代码 1. 需求 这种需求其实在国外一些游戏网站和推广网站中经常会用到&#xff0c;目的是为了让客户 快捷方便的保存网站到桌面 &#xff0c;网站主动尽量避免下次找不到网站地址了&#xff0c;当然精确的客户自己也可以使…

Oracle递归查询笔记

目录 一、创建表结构和插入数据 二、查询所有子节点 三、查询所有父节点 四、查询指定节点的根节点 五、查询指定节点的递归路径 六、递归子类 七、递归父类 一、创建表结构和插入数据 CREATE TABLE "REGION" ( "ID" VARCHAR2(36) DEFAULT SYS_GUI…

GPT提示词技巧,使用教程,国内版官网直达,非套壳

GPT提示词技巧&#xff0c;使用教程&#xff0c;国内版官网直达&#xff0c;非套壳 主站点&#xff1a;https://chatgpt-plus.top&#xff08;江苏福建地区打不开&#xff0c;需要魔法&#xff09; 店铺地址&#xff1a;https://buy.chatgpt-plus.top/ 选择plus账号进入&…

鸿蒙开发ArkUI-X基础知识:【ArkUI代码工程及构建介绍】

代码工程及构建介绍 背景 ArkUI作为OpenHarmony的默认开发框架&#xff0c;在本项目&#xff08;ArkUI-X&#xff09;中需要做到一套代码同时支持多平台构建&#xff0c;所以会采取共仓开发的方式&#xff0c;部分仓直接指向OpenHarmony相关开源仓。 代码结构及仓库结构 代…

【机器学习300问】94、什么是多任务学习?

一、多任务学习的定义 多任务学习&#xff08;Multi-Task Learning, MTL&#xff09;是一种机器学习范式&#xff0c;它允许一个模型同时学习执行多个相关但不完全相同的任务。这种方法的核心是&#xff1a;通过共享表示或权重&#xff0c;不同的任务可以在学习过程中相互促进&…

Python中文件操作和异常处理

文章目录 一、文件操作1.概念2.文件3.二进制 二、基本文件操作三、乱码产生四、with open() as f五、代码实现文件复制粘贴六、try ... except ...七、代码比较 一、文件操作 1.概念 帮助我们把爬虫抓下来的数据&#xff0c;进行保存。 2.文件 在计算机中&#xff0c;没有p…

力扣226. 翻转二叉树(DFS的两种思路)

Problem: 226. 翻转二叉树 文章目录 题目描述思路复杂度Code 题目描述 思路 涉及二叉树的递归解法时往往需要考虑两种思路&#xff1a; 1.在递归遍历时执行题目需要的具体要求&#xff1b; 2.将一个大问题分解为多个小子问题 具体到本体&#xff1a; 思路1&#xff1a;遍历 先…