溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

開啟go 02.Go語言的前世今生

發(fā)布時間:2020-09-04 16:06:46 來源:網(wǎng)絡(luò) 閱讀:319 作者:CrazyWing 欄目:編程語言

開啟go 02.Go語言的前世今生

一、 為什么需要一個新的語言

最近十年來,C/C++在計算領(lǐng)域沒有很好得到發(fā)展,并沒有新的系統(tǒng)編程語言出現(xiàn)。對開發(fā)程度和系統(tǒng)效率在很多情況下不能兼得。要么執(zhí)行效率高,但低效的開發(fā)和編譯,如C++;要么執(zhí)行低效,但擁有有效的編譯,如.NET、Java;所以需要一種擁有較高效的執(zhí)行速度、編譯速度和開發(fā)速度的編程語言,Go就橫空出世了。

傳統(tǒng)的語言比如c++,大家花費太多時間來學(xué)習(xí)如何使用這門語言,而不是如何更好的表達寫作者的思想,同時編譯花費的時間實在太長,對于編寫-編譯-運行這個鏈條來說周期太長。動態(tài)語言如Python,由于沒有強類型的約束,很多問題需要在運行時發(fā)現(xiàn),這種低級錯誤更應(yīng)該交給編譯器來發(fā)現(xiàn)。

  • 人力成本越來越高

  • 機器越來越便宜

  • 機器的性能越來越厲害

  • 在開發(fā)效率和運行速度上達到平衡

go出現(xiàn)之前,無論匯編語言、還是動態(tài)腳本語言,在執(zhí)行效率和開發(fā)效率上都不能兼?zhèn)洹?/p>

執(zhí)行效率 execution speed: C/C++ > Java > PHP
開發(fā)效率 developing efficiency: PHP > Java > C/C++

二、 谷歌工程師的20%時間

谷歌的“20%時間”工作方式,允許工程師拿出20%的時間來研究自己喜歡的項目。語音服務(wù)Google Now、谷歌新聞Google News、谷歌地圖Google Map上的交通信息等,全都是20%時間的產(chǎn)物。

Go語言最開始也是20%時間的產(chǎn)物。

三、 創(chuàng)始人

Go的三個作者分別是: Rob Pike(羅伯.派克),Ken Thompson(肯.湯普森)和Robert Griesemer(羅伯特.格利茨默) 。

  • Rob Pike:曾是貝爾實驗室(Bell Labs)的Unix團隊,和Plan 9操作系統(tǒng)計劃的成員。他與Thompson共事多年,并共創(chuàng)出廣泛使用的UTF-8 字元編碼。

  • Ken Thompson:主要是B語言、C語言的作者、Unix之父。1983年圖靈獎(Turing Award)和1998年美國國家技術(shù)獎(National Medal of Technology)得主。他與Dennis Ritchie是Unix的原創(chuàng)者。Thompson也發(fā)明了后來衍生出C語言的B程序語言。

  • Robert Griesemer:在開發(fā)Go之前是Google V8、Chubby和HotSpot JVM的主要貢獻者。

開啟go 02.Go語言的前世今生

此外還有Plan 9開發(fā)者Russ Cox、和曾改善目前廣泛使用之開原碼編譯器GCC的Ian Taylor。

四、 Go的締造與發(fā)展

4.1 Go的命名

開啟go 02.Go語言的前世今生

這是一封由 Rob Pike 在 2007 年 9 月 25 號,星期二,下午 3:12 回復(fù)給 Robert Griesemer、Ken Thompson 的有關(guān)編程語言討論主題的郵件,郵件正文大意為:在開車回家的路上我得到了些靈感。1.給這門編程語言取名為“go”,它很簡短,易書寫。工具類可以命名為:goc、 gol、goa。交互式的調(diào)試工具也可以直接命名為“go”。語言文件后綴名為 .go 等等

這就是 Go 語言名字的來源,自此之后 Robert、Rob 和 Ken 三個人開始在 Google 內(nèi)部進行了研發(fā),一直到了 2009 年,Go 正式開源了,Go 項目團隊將 2009 年 11 月 10 日,即該語言正式對外開源的日字作為其官方生日。源代碼最初托管在 http://code.google.com 上,之后幾年才逐步的遷移到 GitHub 上。

4.2 Go的發(fā)展過程中的記事

第一個事情是在開發(fā)設(shè)計 Go 語言過程中的第一個重大驚喜是收到了以下這封郵件:

開啟go 02.Go語言的前世今生

這是一封由 Ian Lance Taylor 在 2008 年 6月 7 日(星期六)的晚上 7:06 寫給 Robert Griesemer、Rob Pike、 Ken Thompson 的關(guān)于 Go gcc 編譯器前端的郵件。郵件正文大意如下:我的同事向我推薦了這個網(wǎng)站 http://…/go_lang.html 。這似乎是一門很有趣的編程語言。我為它寫了一個 gcc 編譯器前端。雖然這個工具仍缺少很多的功能,但它確實可以編譯網(wǎng)站上展示的那個素數(shù)篩選程序了。

Ian Lance Taylor 的加入以及第二個編譯器 (gcc go) 的實現(xiàn) 在帶來震驚的同時,也伴隨著喜悅。這對 Go 項目來說不僅僅是鼓勵,更是一種對可行性的證明。語言的第二次實現(xiàn)對制定語言規(guī)范和確定標(biāo)準(zhǔn)庫的過程至關(guān)重要,同時也有助于保證其高可移植性,這也是 Go 語言承諾的一部分。自此之后 Ian Lance Taylor 成為了設(shè)計和實現(xiàn) Go 語言及其工具的核心人物。

第二件事情是 Russ Cox 在2008年帶著他的語言設(shè)計天賦和編程技巧加入了剛成立不久的 Go 團隊。Russ 發(fā)現(xiàn) Go 方法的通用性意味著函數(shù)也能擁有自己的方法,這直接促成了 http.HandlerFunc 的實現(xiàn),這是一個讓 Go 一下子變得無限可能的特性。Russ 還提出了更多的泛化性的想法,比如 io.Reader 和 io.Writer 接口,奠定了所有 I/O 庫的整體結(jié)構(gòu)。

第三件事情是聘請了安全專家 Adam Langley 幫助 Go 走向 Google 外面的世界。Adam 為 Go 團隊做了許多不為外人知曉的工作,包括創(chuàng)建最初的 http://golang.org 網(wǎng)站以及 build dashboard。不過他最大的貢獻當(dāng)屬創(chuàng)建了 cryptographic 庫。起先,在我們中的部分人看來,這個庫無論在規(guī)模還是復(fù)雜度上都不成氣候。但是就是這個庫在后期成為了很多重要的網(wǎng)絡(luò)和安全軟件的基礎(chǔ),并且成為了 Go 語言開發(fā)歷史的關(guān)鍵組成部分。許多網(wǎng)絡(luò)基礎(chǔ)設(shè)施公司,比如 Cloudflare,均重度依賴 Adam 在 Go 項目上的工作,互聯(lián)網(wǎng)也因它變得更好。我記得當(dāng)初 beego 設(shè)計的時候,session 模塊設(shè)計的時候也得到了 Adam 的很多建議,因此,就 Go 而言,我們由衷地感謝 Adam。

第四個事情就是一家叫做 Docker 的公司。就是使用 Go 進行項目開發(fā),并促進了計算機領(lǐng)域的容器行業(yè),進而出現(xiàn)了像 Kubernetes 這樣的項目?,F(xiàn)在,我們完全可以說 Go 是容器語言,這是另一個完全出乎意料的結(jié)果。

開啟go 02.Go語言的前世今生

除了大名鼎鼎的Docker,完全用GO實現(xiàn)。業(yè)界最為火爆的容器編排管理系統(tǒng)kubernetes完全用GO實現(xiàn)。之后的Docker Swarm,完全用GO實現(xiàn)。除此之外,還有各種有名的項目,如etcd/consul/flannel,七牛云存儲等等
均使用GO實現(xiàn)。有人說,GO語言之所以出名,是趕上了云時代。但為什么不能換種說法?也是GO語言促使了云的發(fā)展。

除了云項目外,還有像今日頭條、UBER這樣的公司,他們也使用GO語言對自己的業(yè)務(wù)進行了徹底的重構(gòu)。

五、最后

Go語言是谷歌2009年發(fā)布的第二款開源編程語言(系統(tǒng)開發(fā)語言),它是基于編譯、垃圾收集和并發(fā)的編程語言。
Go語言專門針對多處理器系統(tǒng)應(yīng)用程序的編程進行了優(yōu)化,使用Go編譯的程序可以媲美 C / C++代碼的速度,而且更加安全、支持并行進程。作為出現(xiàn)在21世紀(jì)的語言,其近C的執(zhí)行性能和近解析型語言的開發(fā)效率,以及近乎于完美的編譯速度,已經(jīng)風(fēng)靡全球。特別是在云項目中,大部分都使用了Golang來開發(fā)。不得不說,Golang早已深入人心。而對于一個沒有歷史負擔(dān)的新項目,Golang或許就是個不二的選擇。
很多人將Go語言稱為21世紀(jì)的C語言,因為Go不僅擁有C的簡潔和性能。而且還很好的提供了21世紀(jì)互聯(lián)網(wǎng)環(huán)境下服務(wù)端開發(fā)的各種實用特性。被稱為Go語言之父的羅勃·派克(Rob Pike)就曾說過,你是否同意Go語言,取決于你是認(rèn)可少就是多,還是少就是少(Less is more or less is less)。Go語言的整個設(shè)計哲學(xué)就是:將簡單、實用體現(xiàn)得淋漓盡致。
如今 Go 已經(jīng)是云計算編程語言,GO語言背靠Google這棵大樹,又不乏牛人坐鎮(zhèn),是名副其實的“牛二代”。想象一下:一個只有十幾年發(fā)展經(jīng)歷的編程語言,已經(jīng)成為了如此巨大而且正在不斷發(fā)展的行業(yè)的主導(dǎo)者,這種成功是每個人都無法想象的。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI