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]來代辦一切。
不過,除了AI之外,Google在移動、Web和Cloud幾個平臺方面也為開發者帶來了諸多精彩的內容,這其中就包括由Google Cloud團隊帶來的“Profile-guided optimization with Go”[7]的演講:
注:目前,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提供了構建生產系統的最高效平臺。
說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的無限雙循環
無限雙循環是一個很好的思考更廣泛的軟件開發生命周期的方式。左邊的循環是內部開發循環,也就是大家編寫代碼的地方。你迭代地很快,尋求快速反饋和高效率。而右邊的循環可以看作是外部循環,你已經部署了你的代碼到生產中,你要監控和操作它。
因此,當Go團隊將Go作為一個平臺來考慮時,他們將考慮如何端到端地解決這整個過程,包括內部和外部循環。Cameron下面基于這個循環從developer velocity(開發人員效率)、security(安全)和performance(性能)等方面分別舉一些Go如何解決這些問題的例子。
developer velocity(開發人員效率)
Go有一些旨在為了最大化你團隊的開發人員效率的語言特性、工具和庫。包括了從編寫代碼到將其推送到生產,再到之后可靠運維的整個過程。
Go團隊提供IDE集成,包括為Visual Studio Code開發的插件,使其能夠輕松利用其余工具鏈的特性。Go還提供了強大的并發模型,通過Goroutine實現。Go有內置的格式化工具、內置的測試框架和內置的調試器。Go編譯器本身構建靜態獨立二進制文件,不依賴任何系統范圍的依賴項或單獨的運行時,這使得部署比其他語言更容易、更安全、更快。這是一種端到端的解決方案,用于獲取和維護開發人員效率。
security(安全)
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(性能)
Go的標準庫功能豐富且健壯,并針對性能進行了優化。你可以真正構建任何東西,而無需導入一些重型庫或框架。Go還有一個自我調優的垃圾收集器。如果你曾經花時間為Java調優垃圾收集器,你就會知道這簡直就像是一份全職工作。它可能需要耗費的時間和你最初編寫代碼一樣長。在Go中,垃圾收集器開箱即用,運行高效,并會自動調整以適應你的工作負載需求。 當然,還有Profile Guided Optimization(PGO)[15],使用過PGO的開發者都很喜歡它。有些開發者甚至已經看到了令人印象深刻的性能提升。
開箱即用(out of the box)
圖片中所有這些特性都符合開箱即用的端到端解決方案這一框架,正是這使Go成為構建生產系統最高效的平臺。
Go團隊在做所有這些的同時,也獲得了來自用戶的非常出色的反饋。大部分Go用戶真的很喜歡Go。我們在調查中一直看到這一點,客戶滿意度水平(93%)實際上在業內是罕見的。
Go特性與客戶價值定位
第一行可視為與生產力相關的內容。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的快樂! 歡迎大家踴躍加入!
著名云主機服務廠商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

商務合作方式:撰稿、出書、培訓、在線課程、合伙創業、咨詢、廣告合作。
參考資料
[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