go語言ide開發工具:go語言編譯器哪個好用

2007 年 9 月 21 日,Robert Griesemer,Rob Pike 和 Ken Thompson 在一塊白板上勾勒了一個新語言,並在幾天內定下了計劃和目標,作為一個自由時間的項目進行;2008 年年中,這個項目得到 Google 的全力支持,成為了一個全職項目;2009 年 11 月,Go 語言正式開源 [1],並於三年後發布 1.0 版本。發布 12 年至今,已有上百萬開發者成為「gopher」,已經遠超設計者最初的預期。

# 源起 #

Go 語言的開發團隊可以說是高人云集:Ken Thompson 創造了 B 語言(C 語言前身),是 Unix 和 Plan9 操作系統的創立者之一,和 Dennis Ritchie 一起獲得了 1983 年的圖靈獎;Rob Pike 是 Unix 小組成員,也是 Limbo 語言和 UTF-8 編碼的主要設計者;Robert Griesemer 曾參與制作 Google 的 JavaScript 引擎 V8、Java 的 HotSpot 虛擬機和領域特定語言 Sawzall [2](Sawzall 最早被 Google 用於處理大批量日誌,後來基本被 Go 取代[3])。

Go 語言生態發展之路

Go 語言的三位創始人在 Google I/O 2012 – Meet the Go Team

隨著 Go 的發展,出現了一些聲音稱 Go 語言沒什麼技術優勢,而 Rob Pike 對此的態度是「你們是對的」,Go 語言本身 「並不有趣」,其設計初衷不是為了推動編程語言設計的進步,是為改善軟體工程的工作環境而生 [4]

當時 Google 面臨著軟體大規模增長的問題,開發方式變得緩慢而笨拙。規模化在各種維度上均存在,比如多核並行、生產需求和依賴關係等,導致硬體和軟體都非常大,很多軟體的代碼多達百萬行(大部分使用 C++、Java 或 Python)。Go 語言的誕生解決了大規模的軟體開發中一些核心痛點,比如開發緩慢、不受控制的依賴關係、代碼理解困難和重複造輪子等。 [5]

官網描述 Go 語言可用於構建「簡單、可靠、高效的大規模軟體」,JetBrains 2021 年的最新調研報告顯示,程序員們在工作中使用 Go 語言的比例達到了 61%(Rust 語言用於工作的比例僅 16%) [6]

Go 語言生態發展之路

使用 Go 的場景

可見 Go 確實不是一門「有趣」的編程語言,而更看重工程實踐中的實用性,Go 語言設計中的方方面面都在體現這一點。

# 演進 #

版本更新歷史 [7][8]

  • 2012 年 3 月,語言第一個正式版本 Go 1.0 發布,同時還有一份兼容性說明文檔說明未來版本會確保向後兼容性。
  • 2013 年 5 月,Go 1.1 發布,這個版本的編譯器、垃圾回收機制、goroutine 調度器性能均有增強。
  • 2014 年 12 月,Go 1.4 發布,堆棧大小減少了 10~30%;Android 官方支持包隨版本一起發布;同時 Go 項目從 Google Code 遷移到了 Github。
  • 2015 年 8 月,Go 編譯器實現自舉,完全移除了 C 語言;重新設計了垃圾回收器,支持並發,垃圾回收延遲顯著降低,此後版本對垃圾回收器有更進一步的優化。
  • 2018 年 8 月,Go 1.11 版本引入了 Go 模塊功能,以響應在當年語言調研中反饋的模塊管理問題;增加了實驗性的 WebAssembly 支持。
  • 2019 年 9 月,Go 1.13 版本中,改進了 sync 包 Pool 組件的資源被垃圾回收器清除的機制;重寫了逃逸分析邏輯。
  • 2020 年 8 月,Go 鏈接器得到了實質性的提高,減少了30% 的內存資源佔用,提高了代碼的可維護性。
  • 2021 年 2 月,Go 1.16 支持了 macOS ARM64;同時默認使用 Go 模塊功能(同樣來自調研報告反饋的情況)。
  • 2021 年 8 月,Go 1.17 發布,增加了對 Windows ARM64 的支持;語言有三個小的增強(unsage 包的兩個新函數和語言類轉換規則的擴展)。

Go 語言並沒有特別激進的新特性,而是從早期的編程語言中繼承了很多內容,並做了有效的組合 [9]

Go 語言生態發展之路

影響 Go 語言設計的早期編程語言

Go 語言里一些廣受開發者喜愛的特性 [10]

  • 並發性:這是 Go 語言最大的特色,從語言層面支持並發,goroutine 和 channel 可以非常容易的實現安全高並發。
  • 高性能 Http Server:通過簡單的代碼調用就可以快速實現基於協程的 Web 服務[11],處理效率遠高於 PHP。
  • 易部署:直接編譯成機器碼,除了 glibc 沒有其他外部依賴。
  • 易學習:語言設計精簡,25 個關鍵詞表達能力強大;因為有 C 語言的基因,所以有 C 語言基礎的開發者學習 Go 語言會非常輕鬆。
  • 工具鏈 & 庫:完善的工具鏈(代碼分析、依賴管理等)和出色的標準庫大大優化了開發者學習和應用的體驗。

Go 發布至今還未正式支持泛型,甚至曾有很多人認為 Go 語言或許永遠不會加泛型,但其實關於泛型的推進工作一直在進行,從 2020 年的調研報告來看,泛型是使用 Go 語言的開發者最需要的特性 [12]

Go 語言生態發展之路

2020 年 Go 開發者調研報告:最需要但還缺少的特性

2021 年初 Ian Lance Taylor 正式發布了添加泛型的提案,不出意外會在下一個版本 Go 1.18 中實現。

# 社區 #

# 語言項目社區

Go 語言項目在 2009 年開源,項目的 Star 數已達到 9 萬。根據 GitHub 提供的數據 [13],截止 2021 年 10 月 20 日共有 166 人提交了超過 5 萬次代碼,其中 Go 語言項目成員佔比 28.9%,貢獻佔比 64.9%,Google 員工(非語言項目成員)佔比 24.7%,貢獻佔比 17.83%,貢獻趨勢如下圖:

Go 語言生態發展之路

Go 語言項目代碼提交情況

從代碼提交情況來看,大部分貢獻來自 Google 內部,近三年來每年的提交人數穩定在 70~80 人。

參與社區提交 Issue 的用戶數量也在持續增長,不過目前開啟中的 Issue 仍有超過 7000 個,有近一半為「待調查分類」,可能為無效的 Issue。

Go 語言生態發展之路

Go 語言項目 Issue 創建情況

除了語言本身項目,語言的社區其實是更加廣義的,使用 Go 語言的開發者有一個可愛的昵稱 「Gopher」。

# 「Gophers」 社區

在 GolangUK 2015 會議上,Damian Gryski 提到了 「Gophers」 的文化,這是開發者被 Go 吸引進而成為 「Gopher」 的原因 [14]。「Gophers」 的社區文化:

– Code
– gofmt- if err != nil { … }- go vet- go build -race- golint (CodeReviewComments)- godoc.org/github.com/user/package- go get- limited use of interface{}- Social- Simple is better than complex- Performance matters- Costs are visible

SlashData 在 2021 年初發布的開發者調研顯示 Go 開發者人數已超過 200 萬,社區人數排行第十 [15]

Go 語言生態發展之路

編程語言社區人數

在官方調研報告中,約半數開發者清楚了解如何給社區貢獻,而感到自己的貢獻是受歡迎的開發者比例約為 60%,這兩個比例都在逐年提升 [12]。接受調研的開發者其實已經是相對活躍的,主觀感受會導致調研結果有誤差,但整體來看,仍有越來越多開發者願意參與到社區貢獻中。

Go 語言生態發展之路

Go 開發者調研報告 2020:社區滿意度

活躍於社區的開發者通過郵件、媒體論壇、固定會議等交流 [16],有約 30% 開發者會頻繁參與到開源項目中[12],但更多開發者並不會發出聲音,他們在實踐中使用 Go,也切實的從社區資源中獲益。

  • 郵件列表:golang-nuts、golang-dev、golang-announce
  • 用戶群和會議:GoBridge、GoDiscourse、GopherCon
  • 媒體論壇:The Go Forum、Gophers Slack Channel、Golang News、Twitter、Stack Overflow、Reddit 等

# 應用 #

GitHub 上 Go 為主要語言的開源項目已超過 10 萬個,約 24 萬開發者在這些開源項目中提交 PR [17]

Go 語言生態發展之路

GitHub 上每月新創建的 Go 語言項目數

官方調研報告顯示,Go 應用最多的領域是 Web 開發,此外也被廣泛應用於資料庫、DevOps、網路編程和系統編程;在科學計算、手機等方面的應用較少 [12]

Go 語言生態發展之路

Go 開發者調研報告 2020:應用領域

這一點從開源項目中也可以了解到,2021 年截止 9 月最活躍的倉庫(根據 PR 數量排序)基本上都與資料庫、微服務平台和容器編排相關 [17]。Go 已成為雲基礎架構的語言,這絕不是偶然,最初 Go 的設計目的就是讓 Google 工程師能更高效的編寫「雲端」軟體。

Go 語言生態發展之路

2021 年 GitHub 活躍倉庫(根據 PR 數量排序)Top 10

2013 年 Matt Stine 首次提出雲原生(CloudNative)概念,2015 年雲原生計算基金會(CNCF,Cloud Native Computing Foundation)成立,致力於發展推廣雲原生技術。CNCF 給雲原生的定義中提到了目前的代表技術包括容器、服務網格、微服務、不可變基礎架構和聲明式 API 等 [18]

圖片可上下滑動

Go 語言生態發展之路

雲原生基礎設施的很多代表性項目均為 Go 語言實現,這些技術的普及又帶動了 Go 語言的推廣,可以說 Go 語言和「雲」是相互成就的。

  • 容器應用:Docker、Kubernetes
  • 資料庫應用:etcd、TiDB
  • 微服務框架:Go Kit、Go Micro、Gizmo
  • Web 框架:Gin、Echo、Beego

國內如 PingCAP、騰訊、百度和京東等大公司均有 Go 語言的應用,2020 年 JetBrains 的開發者生態系統調研中,中國有 16% 的開發者在使用 Go 語言 [19]

Go 語言生態發展之路

Go 語言開發者地域分布

# 總結 #

回顧 Go 語言的發展情況,我們可以清楚地看到:

1. 針對開發痛點的語言特性:Go 從語言層面支持並行,部署簡單,很好的解決了軟體開發各維度規模化中出現的痛點。

2. 低學習曲線:可以快速上手並投入實際開發工作。

3. 開發者體驗不斷改善:開源社區運營,有完整的工具鏈、標準庫和一些不錯的開發框架。

4. 「殺手級」應用:Docker、Kubernetes 出現,雲計算技術不斷完善普及,雲原生概念興起。

5. 巨頭公司支持:大量國內外公司在使用 Go 語言開發,也會作為 Go 語言發展的支持後盾。

技術發展過程中,會順應需求出現不同的開發工具或者說材料,Go 語言所有的特點都是為了實現更加高效的大規模開發而生,至少在雲原生領域,Go 語言的地位已很難動搖。

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/217258.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-09 00:26
下一篇 2024-12-09 00:26

相關推薦

發表回復

登錄後才能評論