Video thumbnail for The Untold Story of Golang

Go語言不為人知的故事:雲端時代的效率之王?

Summary

Language:

Quick Abstract

想知道 Google 背後的三位傳奇工程師如何打造出雲端時代的 C 語言替代品嗎?Golang 誕生於 Google 內部,旨在解決 C++ 編譯緩慢、Java 佔用記憶體過多和 Python 速度不足等問題。它擁有媲美 C++ 的效能、Python 的簡潔以及卓越的並行處理能力,快速編譯、易於閱讀且功能強大,是驅動網際網路核心系統的關鍵技術。本文將揭示 Golang 如何從 Google 內部工具演變成雲端基礎設施的基石,以及它如何影響現代程式設計。

  • 快速編譯:大幅縮短構建時間,提升開發效率。

  • 高效能:優於 Java,接近 C++,適合高效能應用。

  • 內建並行:輕鬆利用多核心處理器,簡化並行程式設計。

  • 跨平台:輕鬆編譯到不同作業系統和 CPU 架構。

  • 簡潔的語法:僅有 25 個關鍵字,易於學習和使用。

  • 雲端原生:Docker 和 Kubernetes 等專案的基石。

Golang 的設計哲學是簡潔至上,去除不必要的複雜性,專注於解決實際問題,如快速構建、可靠部署和大規模程式碼。Go 在 AI 基礎設施中扮演的角色也日益重要,驅動著 AI 模型和機器學習工作流程。了解這門由 Google 內部痛點而生的語言,如何成為雲端時代的領頭羊!

Go語言的誕生與發展:從Google內部到雲端革命的核心

挑戰與靈感

在21世紀中期,Google的工程師們面臨著一個令人沮喪的現實。僅僅為了測試一個單一的變更,代碼編譯就需要45分鐘或更長時間。Google的代碼庫已經變得像一張網,數千名工程師在一個龐大的存儲庫中工作,而他們的工具卻在崩潰。C++編譯耗時極長,Java佔用大量內存,Python對於系統工作來說速度太慢。多核處理器到處都是,但現有的語言使得並行編程成為一場噩夢。

在這樣的背景下,三位傳奇工程師——Robert Grezma、Rob Pike和Ken Thompson,決心打造一種新的編程語言。Pike曾在Unix和Plan 9上工作,Thompson共同創建了Unix並設計了導致C語言誕生的B語言,而Griezma在Sun公司構建了Java的虛擬機。他們不僅擁有深厚的計算機歷史背景,還擁有Google的全力支持。

他們的目標很明確:消除影響開發人員生產力的緩慢問題。正如Pike所說,Go更多地關注軟件工程,而不是編程語言研究。

語言的誕生

經過兩年的開發,2009年11月,第一個公開版本的Go發布了。它簡單、高效,旨在解決長期以來困擾工程師的挑戰。

在創建過程中,他們面臨著經典的雞和蛋問題:需要編譯器來編譯語言,但語言本身還不存在。Thompson的秘密武器是Plan 9,這是一個來自貝爾實驗室的分布式操作系統,其編譯器工具鏈精簡、快速且經過代碼測試。

團隊從用C語言編寫第一個Go編譯器開始。這個編譯器很簡單,幾乎是粗糙的,但它可以解析Go代碼並生成機器代碼。然後,他們使用這個基於C的編譯器來編譯一個用Go編寫的自身版本,這種方法稱為自舉。到2015年的Go 1.5,整個工具鏈都用Go本身編寫。

創新的運行時

Go的真正工程奇蹟在於其運行時。大多數語言要么編譯為本地代碼,速度快但複雜;要么在虛擬機上運行,如Java,靈活但速度慢。Go選擇了第三條路,構建了一個既本地又智能的運行時。

Go直接編譯為彙編代碼,但該彙編代碼鏈接到一個複雜的運行時,處理複雜的事情。運行時管理跨CPU核心的Go例程,並行運行垃圾收集,使網絡IO非阻塞,而無需編程員編寫一行線程代碼。

當Go程序發出網絡請求時,它不會阻塞整個線程。運行時會暫停該Go例程,並在等待數據時運行其他例程。這一切都是自動發生的,無需回調或asyncate關鍵字。

Go還可以交叉編譯,在Mac上編寫代碼,可以為Linux服務器、Windows機器甚至不同的CPU架構編譯。編譯器為每個目標生成正確的彙編代碼。

簡化的設計哲學

Go的創建者們採取了獨特的方法,將一切不必要的東西都去掉,將其剝離到構建大型系統所需的絕對最低限度。沒有繼承層次結構,沒有函數重載,沒有異常,甚至泛型也被砍掉了。

每個功能都必須根據一個問題來證明其存在的合理性:這對在同一代碼庫上工作的數千名團隊成員有幫助還是有害?Go最終只有25個關鍵字,而Python有35個,Java有50個,C++有60多個。

並行處理的優勢

Go將並發性作為第一公民。團隊借鑒了Tony的通信順序進程,Go程序通過輕量級Go例程之間的通道傳遞數據,而不是在線程之間共享內存。

一個Go例程只佔用2KB的棧空間,而一個Java線程佔用2MB。可以輕鬆地生成數百萬個Go例程。標準庫包括一個並行運行的垃圾收集器,在程序繼續運行時清理內存。

開源與接受度

2009年11月10日,Google將Go開源。團隊不確定編程界是否會接受這門語言,但他們希望他們關於並發性和簡單性的想法可能會影響其他語言。

反應分裂了編程世界。一些開發人員為比周圍複雜性更乾淨的東西的到來而歡呼,而另一些人則將其視為只是另一種語言,或抱怨缺少功能。但早期採用者看到了C++級別的性能和Python級別的易用性。

在Google內部,團隊開始用Go版本替換舊工具。編譯時間從幾分鐘縮短到幾秒鐘。

雲端革命的核心

2013年,Docker推出,完全用Go構建。容器在整個行業中爆發,突然間,每個人都在運行Go代碼。2014年,Google推出了同樣用Go編寫的Kubernetes。Docker和Kubernetes的組合使Go成為雲端革命的中心。

隨後,Prometheus用於監控,CD用於分布式存儲,ISTTO用於服務網格,Terraform用於基礎設施。到2024年,Go在GitHub十大語言中保持著自己的地位,為現代雲端基礎設施提供支持。

遲來的泛型

十多年來,每個Go會議都有一個問題:Go什麼時候會有泛型?團隊的回答從未改變:當我們能做好的時候。

其他語言有泛型編程,如C++中的模板和Java中的泛型。Go依靠接口和代碼生成。社區在那些錯過泛型的人和那些欣賞Go簡單性的人之間分裂。

Go團隊拒絕匆忙。他們看到了語言不小心添加功能時發生的事情。最終,在2022年3月15日,Go 1.18引入了泛型。經過13年,Go的第一個主要語言功能到來了。

與AI的結合

Go的卡通吉祥物——一個由Renee French設計的微笑藍色地鼠,成為科技界最知名的符號之一。

在2024年,37%的Go開發人員從事ML AI系統的數據管道工作,41%構建AI模型的API端點。雖然Python在AI研究中佔主導地位,但Go悄悄地為AI系統背後的基礎設施提供支持。

Go的API流量份額在2024年從8.4%躍升至12%,因為公司正在構建AI驅動的服務。

未來展望

Go的路線圖包括對現代硬件的優化,更好的CPU向量化,針對多核機器的更智能垃圾收集,以及AI工作負載的性能改進。

團隊堅持其核心原則:謹慎發展。任何新功能都必須使開發人員的生活更輕鬆,而不是更困難。

從Google內部的走廊抱怨到雲端計算的支柱,Go證明了在編程中,少即是多。這門語言的成功不是因為它有最多的功能,而是因為它有正確的功能。

在一個充滿無盡複雜性的世界中,Go將繼續發展,同時忠於使其偉大的簡單性。

Was this summary helpful?

Quick Actions

Watch on YouTube

Related Summaries

No related summaries found.

Summarize a New YouTube Video

Enter a YouTube video URL below to get a quick summary and key takeaways.