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.pswp.cn/web/14695.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/14695.shtml
英文地址,請注明出處:http://en.pswp.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),使得語言模型能夠接受、關聯和處理多模態信息,如圖像…

winform在一個類中調用窗體的控件和方法的兩個方式

第一: 在類中創建窗體對象的方式,通過對象調用控件或方法 eg: Form1 form1 new Form1(); form1.Button; //調用控件 form1.Method(); //調用方法 要注意,對應控件的Modifiers屬性要設置成public . 第二: 在窗體Form類下定義靜態變量(例如:form1)&…

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…

linux創建私有docker倉庫以及推拉

創建私有倉庫: 1.下載 registry鏡像。 2.執行 registry 鏡像(#為注釋內容,\為換行): docker run -d \# --restartalways每次都是開機自動啟動--restartalways \# --name registry 表示容器名--name registry \# 表示…

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…

【Muduo】TcpServer類

TcpServer統領之前所有的類,是用戶直接使用的類。它通過ThreadPool管理所有的loopthread,保存所有的TcpConnection,保存用戶提供的各種回調函數并向TcpConnection的Channel中注冊回調。它負責監聽指定的端口,并接受來自客戶端的連…

ZeRO-3、模型并行、流水線并行適用情況

ZeRO-3 適用場景:參數量大但計算量相對均衡的情況。 主要特點: 參數分片:將模型參數、優化器狀態和梯度在多個 GPU 上進行分片。顯存優化:顯著減少每個 GPU 上的顯存占用,使得可以在較小的 GPU 上訓練更大的模型。 …

思科模擬器--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;顧名…

Android Retrofit 封裝模版

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 一、加上網絡訪問的權限二、引入依賴三、由API生成JavaBean四、封裝Retrofit五、調用 一、加上網絡訪問的權限 <uses-permission android:name"android.p…

分布式事務——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;當然精確的客戶自己也可以使…

Python 字符串中運算符號可運行

使用eval() re {\n "path": "/sms/sendMsg",\n "data": {\n "mobile": "12345678901",\n "signCode": "短信簽名",\n "templateCode": "SMS_yyyy…