Go 編程語言為開發(fā)者社區(qū)所熟知已有幾年,但絕對仍然令人驚嘆。它成功地保持了最受歡迎的10 種語言的地位,這并非沒有原因。超過 80,000 名開發(fā)者分享了他們的意見。Golang 獲得了近 63% 的“喜愛”選票。我們無法想象更好的建議,但無論如何我們準(zhǔn)備了這份概述,在我看來,是為了向您提供有關(guān) Go 編程語言的最重要的信息。
Go 語言簡史
Go 編程語言的故事始于 Google,當(dāng)時三位工程師 Robert Griesemer、Rob Pike 和 Ken Thompson 對 C++ 的復(fù)雜性以及缺乏提供高效編譯和執(zhí)行的簡單語言感到厭倦。這就是為什么在 2007 年 9 月 21 日,他們開始設(shè)計一種新語言。他們花了兩年時間,在 2009 年 11 月 10 日,Go 編程語言成為公共開源項目。又過了三年,2012 年 3 月,Go 語言 1.0 版本發(fā)布。
Go 發(fā)明者的主要目標(biāo)是將解釋型動態(tài)類型語言的編程簡便性與靜態(tài)類型編譯語言的效率和安全性結(jié)合起來。此外,Go語言旨在支持網(wǎng)絡(luò)和多核計算,并加速編碼過程。
為了實現(xiàn)這些目標(biāo),格里塞默、派克和湯普森注重簡單性。這就是為什么 Go 語言的語法受到 C 家族的啟發(fā)。其他輸入,例如來自 Pascal,您可以在聲明和包中注意到。其他靈感來自 Newsqueak 和 Limbo - 他們幫助創(chuàng)建了 Go 的并發(fā)方面。這使得這種編程語言融合了這些不同解決方案的最佳功能。
它叫Golang還是Go?我們回答
Go 編程語言通常稱為 Golang。這是為什么?原因很簡單 - 當(dāng)時“go.org”域名不可用,因此程序員決定推出 golang.org(Go 和語言的混合體)。因此,官方語言名稱是 Go,但官方 Twitter 標(biāo)簽是#golang。
什么是 Go 語言?
牢記上述所有內(nèi)容,Robert Griesemer、Rob Pike 和 Ken Thompson 將 Go 打造為一種可編譯、并發(fā)、垃圾收集、靜態(tài)類型的語言。他們希望由精通編程的程序員為社區(qū)打造最有效的語言。
Golang 語言有何特別之處?
盡管已有 12 年的歷史,Go 仍然越來越受歡迎,它是一種常用的編程語言,因為它在一個方便的包中提供了獨特的優(yōu)勢。Go 流行的另一個原因是 Go 是一種旨在創(chuàng)建后端的通用語言(GPL)。在 2012 年的 Strange Loop 會議上,Andrew Gerrand 將 Go 介紹為“優(yōu)雅增長的代碼”。Golang 的一些優(yōu)勢(如下所列)證明這個引用仍然是最新的。
Go Proverbs是關(guān)于 Go 本質(zhì)的有力引用列表。Rob Pike 說“ Gofmt 的風(fēng)格沒人喜歡,但 gofmt 卻是每個人都喜歡的?!?即使,特別是在開始時,您對使用大括號等的必要性不滿意,但最終您會欣賞 gofmt。只有一種標(biāo)準(zhǔn)在運行——而不是像大多數(shù)編程語言那樣有多種約定。Gofmt 作為一款專用工具,在市場上非常出色,對于保持凝聚力確實有幫助。
代碼簡單
Go 的語法相對較小,并且大致保持不變,沒有任何大的變化。更重要的是,只有一種標(biāo)準(zhǔn)代碼格式(由fmt工具生成)。Go 語法缺乏變化也對開發(fā)人員有幫助。它幾乎保持不變,因此代碼不會過于復(fù)雜,并且無需學(xué)習(xí)新的范例或語法。這使得它變得透明、易于學(xué)習(xí)和理解。所有這一切都可以歸結(jié)為 Go 創(chuàng)建者的一句話:兼容性的承諾。如果您使用新版本的 Go,幾乎所有用舊版本編程語言編寫的程序仍然可以編譯和運行,不需要任何更改。這使得它非常容易維護(hù)。
適合 Go 開發(fā)人員的最佳 IDE 和編輯器
作為一個開源項目,Go 提供了對所需開發(fā)工具的輕松訪問。有多種:
IDE:
JetBrains 的 GoLand 是一款跨平臺 IDE,具有動態(tài)錯誤檢測和修復(fù)建議、一步撤消重構(gòu)、智能代碼完成、死代碼檢測、文檔提示和 git 集成等功能。
GoClipse - 支持 Go 編程語言的 Eclipse IDE。
LiteIDE - 這個開源和跨平臺解決方案包括可配置的構(gòu)建命令、代碼編輯器和管理以及廣泛的 Go 支持。
Zeus IDE 是一款適用于 Windows 平臺的 IDE,借助用于自動完成、文檔和代碼導(dǎo)航的 gocode 以及用于自動代碼格式化的 gofmt 和 goimports 等工具,使開發(fā)人員的工作更加輕松。
編輯:
VSCode - 具有廣泛 Go 支持的代碼編輯器,提供語言代碼導(dǎo)航、符號搜索、括號匹配和片段等功能。
和插件:
VIM-go - 這個定期更新的 Vim 插件提供 Go 包編譯、折疊和語法突出顯示以及集成的 delve 支持。
比這些工具更有趣的是,Go 創(chuàng)建者建立了一個在線環(huán)境,您可以在其中測試用 Go 編程語言編寫的產(chǎn)品 - Go Playground。
Go 編程語言速度很快
關(guān)于 Go 的普遍看法是它是一種快速的編程語言。這些不僅僅是空話——這個比較清楚地證明了這一點。與 Python 相比,這些數(shù)字顯然有利于 Go 一方。
但如果我們談?wù)撍俣?,究竟是什么?Go 語言脫穎而出呢?答案可能是 Goroutines,它同時執(zhí)行活動。Goroutine 是由 Go 運行時管理的輕量級線程。它比操作系統(tǒng)中的線程消耗更少的資源,并且當(dāng)您比較這兩種解決方案時,創(chuàng)建它們的成本肯定更低。
并發(fā)范式
如果一個程序支持并發(fā)范例,則意味著它可以在重疊的時間段內(nèi)(看似)同時處理多個任務(wù)/操作。Go 原生支持并發(fā)范式,它允許多線程、多處理和異步。Golang 運行時調(diào)度程序有助于管理創(chuàng)建并需要處理器時間的所有操作(Goroutines)。通道也有幫助——這些類型化的管道同步 Goroutines 并使它們之間的通信更加高效和流暢。
這些并不是工程師愿意使用的唯一 Go 功能 - 依賴管理、運行時反射的強(qiáng)大功能、垃圾收集和組件也是 Golang 的顯著優(yōu)勢。
在 CodiLime,我們在許多項目中利用了 Golang 的優(yōu)勢 - 例如當(dāng)我們構(gòu)建微服務(wù)安全平臺時為我們的客戶。
Golang 在實踐中最適合做什么
云原生開發(fā)
由于其并發(fā)性和網(wǎng)絡(luò)功能以及高度的可移植性,Go 對于構(gòu)建云原生應(yīng)用程序非常有用。云原生計算的幾個支柱,例如 Docker、Kubernetes 和 Istio,實際上是使用 Go 編程語言構(gòu)建的。
各種網(wǎng)絡(luò)服務(wù)
并發(fā)是網(wǎng)絡(luò)應(yīng)用程序的命脈,Go 的原生并發(fā)特性(主要是 goroutine 和通道)非常適合此類任務(wù)。因此,很多 Go 項目對于網(wǎng)絡(luò)、分布式任務(wù)和云服務(wù)很有用,例如 API、Web 服務(wù)器和 Web 應(yīng)用程序的簡單框架。
獨立工具和實用程序
Go 是一種編譯語言,這意味著應(yīng)用程序被編譯成二進(jìn)制文件。這些二進(jìn)制文件本身幾乎沒有外部依賴項,并且?guī)缀蹩梢栽谌魏蔚胤竭\行。由于 Go 中的程序啟動速度快,并且可以輕松打包以進(jìn)行重新分發(fā),因此它們對于開發(fā)實用程序和其他工具非常有用。一個實例是訪問服務(wù)器 Teleport(用于 SSH 等)。通過下載預(yù)構(gòu)建的二進(jìn)制文件或從源代碼構(gòu)建它,Teleport 可以快速、簡單地安裝在服務(wù)器上。
Go 的功能對許多行業(yè)都有幫助。這是事實,但并沒有讓任何事情變得更清楚!這就是為什么我選擇了一些(在我看來)最有趣的案例研究。您可以在Go 語言網(wǎng)站上找到?jīng)Q定在其項目中依賴 Go 的公司的完整列表。
谷歌
由 Google 開發(fā)人員創(chuàng)建的編程語言現(xiàn)在支持 Google 解決方案。Chrome優(yōu)化指南服務(wù)就是其中之一。這項基于 Go 的服務(wù)會為您的頁面加載提供改進(jìn)建議(以及實施更改的最佳時間)。另一個是 Firebase,它是 Google Cloud 客戶的托管移動平臺。最開始只是用Go寫了一個小服務(wù)。當(dāng)應(yīng)用程序開發(fā)完成后,工程師決定用 Go 語言完全替換 Node.js 后端代碼。
這兩個只是一個示例 - Google 在其他有趣的項目中使用 Go 。
kubernetes
Kubernetes 最初是由 Google 建立的,所以我將它們放在一起?,F(xiàn)在,它是由云原生計算基金會開發(fā)的一個單獨的項目。這個用于管理容器化工作負(fù)載和服務(wù)的開源容器編排系統(tǒng)是由 Google 創(chuàng)建的。而且,您毫無疑問可以猜到,它是用 Go 語言編寫的。使用這種編程語言的決定并不是家庭關(guān)系的結(jié)果,而是由于 Go 的快速工具、高質(zhì)量的庫和垃圾收集。
Uber
Uber 使用 AresDB——一個用 Go 編程語言編寫的實時分析儀表板。它使公司能夠有效地統(tǒng)一、簡化和改進(jìn)實時分析數(shù)據(jù)庫解決方案。AresDB 使用 Go 開發(fā),允許 Uber 放棄第三方數(shù)據(jù)庫解決方案并在內(nèi)部保留深入分析。
Docker
Docker, Inc. 產(chǎn)品(也稱為 Docker)是一種 PaaS(平臺即服務(wù)),可以在容器中交付軟件。正如您可能猜到的,Docker 是用 Go 構(gòu)建的。工程師的選擇是基于 Go 在 Linux 中工作的能力(作為選定的初始操作系統(tǒng)),以及將 Docker 的功能合并到其環(huán)境中的用戶友好路徑。本文解釋了為什么“Docker 找不到比 Go 更好的合作伙伴”。
PayPal
這家公認(rèn)的跨國金融技術(shù)公司支持在線匯款,是支票和匯票等傳統(tǒng)紙質(zhì)方法的替代方案。他們的支付處理平臺是用 C++ 開發(fā)的,但代碼的復(fù)雜性減慢了平臺現(xiàn)代化流程的速度。Go 被選為簡化和開發(fā)平臺的解決方案。
Dropbox
Dropbox 是一種用于存儲和共享文件以及項目協(xié)作的托管服務(wù)。隨著基礎(chǔ)設(shè)施的發(fā)展,Dropbox 團(tuán)隊開始尋找更有效地擴(kuò)展系統(tǒng)的解決方案。這就是為什么他們將關(guān)鍵的性能關(guān)鍵后端從 Python 轉(zhuǎn)移到 Go,因為它具有更好的并發(fā)支持和執(zhí)行速度。但還有更多 - Dropbox 的一些使用 Go 編程語言構(gòu)建的庫是開源的 - 示例可以在他們的網(wǎng)站上找到。這些用例展示了 Go 在特定環(huán)境中的表現(xiàn)。
什么時候 Golang 不是您項目的最佳選擇?
Go 的缺點
沒有一種解決方案適合所有用戶和案例。這同樣適用于 Go 語言。有何障礙?
有限的泛型支持——很長一段時間,Go 沒有泛型。最后,在 Go 1.18 中,引入了泛型類型和函數(shù)。然而,泛型并沒有得到完全支持。例如,具有通用參數(shù)的方法未實現(xiàn)。
較小的默認(rèn)庫 - 您可能會注意到缺少函數(shù),例如字符串和數(shù)字。
在某些情況下,Go 可能太簡單 - 您可能會錯過諸如 map 或 reduce 之類的函數(shù) - Go 編程語言不提供它們。
就像其他所有編程語言一樣,Go 也有其弱點。在我看來,了解它們至關(guān)重要,這樣您才能選擇最能滿足您需求的解決方案。
何時押注 Golang 語言
每種編程語言都有權(quán)衡,Golang 也不例外。例如,Python 中的腳本可以編寫得更快,因為沒有強(qiáng)制的編碼風(fēng)格和更多的語法糖,而 Go 可能需要更多的努力來生成代碼,因為它具有更明確的語法。
毫無疑問,Go 是一門有前途的語言,但它有特定的用途。它主要用于API/RPC服務(wù)和編寫CLI。人們對在不同領(lǐng)域使用 Go有著濃厚的興趣,但一些開發(fā)人員在這些領(lǐng)域工作時面臨著特定的障礙。Golang 主要是由 Google 開發(fā)的,旨在解決硬件資源受限的軟件可擴(kuò)展性問題。Go 對于解決處理時間瓶頸問題也很有用。
用戶群不斷擴(kuò)大的后期公司的后端經(jīng)常難以跟上活動量。由于 Golang 支持并發(fā)功能并具有最小的內(nèi)存占用,因此它非常適合服務(wù)器必須處理高需求的后端應(yīng)用程序。
Golang 是一種編程語言,Dropbox 使用它來有效管理其超過 5 億客戶的網(wǎng)絡(luò)。該語言也非常適合開發(fā)每月接待數(shù)百萬訪問者的電子商務(wù)網(wǎng)站。資源密集型服務(wù) Docker、Terraform 和 Kubernetes 均由 Golang 提供支持。
Go 背后有一個強(qiáng)大的社區(qū) - 在GitHub上,您可以找到一系列有用的信息:有關(guān)如何開始和使用 Go 語言的有用鏈接、其他知識來源、Slack 頻道、Go 會議的日期,但這還不是全部。還有許多書籍和播客值得您關(guān)注。當(dāng)新版本發(fā)布時,即使是 Go 創(chuàng)建者仍然會自己撰寫新的博客文章 - 開發(fā)人員可以提供他們的想法并做出貢獻(xiàn)??傊?,這一切都增強(qiáng)了社區(qū)和語言本身的能力。
Go 語言的局限性
選擇編程語言時,在做出決定之前了解其局限性非常重要。它將節(jié)省您的時間和金錢。
iOS應(yīng)用程序開發(fā)
這是有爭議的,但許多人聲稱 Golang 可能為構(gòu)建 iOS 應(yīng)用程序設(shè)置了限制。如果您訪問此類故障排除論壇,您會發(fā)現(xiàn)開發(fā)人員在回答有關(guān)基于 Golang 的 iOS 應(yīng)用程序開發(fā)的問題時遇到問題。
此外,對于只想在 Android 和 iOS 項目中使用一種語言的開發(fā)人員來說,Go 并不是一個完美的解決方案。因此,Go的發(fā)展有一定的局限性,并不總是一帆風(fēng)順。隨著 Golang 的發(fā)展,應(yīng)該預(yù)計 iOS 開發(fā)工具也會得到改進(jìn)。
不可調(diào)節(jié)
那些支持動態(tài)類型語言的人認(rèn)為這種靜態(tài)類型語言的編碼靈活性較低。當(dāng)然,這是此類編程語言的本質(zhì),但在為您的產(chǎn)品選擇最合適的選項時值得了解。
Go的未來發(fā)展
未來的 Go 開發(fā)將越來越關(guān)注其開發(fā)者社區(qū)的偏好和要求,Go 的維護(hù)者會修改語言以更好地服務(wù)于這些受眾,而不是樹立嚴(yán)格的先例。泛型就是一個典型的例子,在關(guān)于如何進(jìn)行的激烈爭論之后,泛型最終被納入到語言中。
2021 年 Go 開發(fā)者調(diào)查表明,雖然 Go 用戶普遍對該語言的功能感到滿意,但仍有很大的發(fā)展空間。依賴管理、Go 中的一個長期問題、錯誤診斷和可靠性是用戶請求更改的首要領(lǐng)域,而內(nèi)存利用率、CPU 使用率、二進(jìn)制大小和構(gòu)建時間等問題受到的關(guān)注要少得多。
Go 的速度和開發(fā)簡易性尚未在其他情況下得到充分利用,其在企業(yè)開發(fā)中的利用仍是未知數(shù)。然而,Go 作為一種重要的編程語言的未來已經(jīng)確定,尤其是在云中,它的速度和易用性使得構(gòu)建可長期保持的可擴(kuò)展基礎(chǔ)設(shè)施變得更加容易。
結(jié)論
Go 編程語言仍然不如 Python 流行,但它已經(jīng)在開發(fā)者世界中嶄露頭角。其簡約的語法、創(chuàng)新的 Goroutines 而不是典型的線程以及廣泛的工具甚至讓美國運通、Cloudflare、Facebook、微軟和 Netflix 等大公司都信服。該列表顯示了世界各地有多少家公司正在使用 Go 編程語言。它的長度令人印象深刻,而且還在不斷增長。如果您想知道是否給 Go 一個機(jī)會,也許這個建議會告訴您。在我看來,沒有比社區(qū)更好、更有力的見證了。
“優(yōu)雅地增長的代碼”也會隨著支持性社區(qū)和強(qiáng)大的可用工具而增長。這使得 Go 編程語言成為一個有競爭力且值得關(guān)注的選擇。
-
Go
+關(guān)注
關(guān)注
0文章
43瀏覽量
12248 -
編程語言
+關(guān)注
關(guān)注
10文章
1942瀏覽量
34707 -
編輯器
+關(guān)注
關(guān)注
1文章
805瀏覽量
31163
原文標(biāo)題:Go 編程語言 - 你應(yīng)該知道的一切
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論