亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

我們?yōu)槭裁催x擇了 Go 語言

原創(chuàng) 2016-11-10 17:07:47 651
摘要:我發(fā)現(xiàn)我花了四年時間錘煉自己用 C 語言構(gòu)建系統(tǒng)的能力,試圖找到一個規(guī)范,可以更好的編寫軟件。結(jié)果發(fā)現(xiàn)只是對 Go 的模仿。缺乏語言層面的支持,只能是一個拙劣的模仿。這是云風(fēng)在博客中說過的一句話。最近開始做一個很有意思的個人項(xiàng)目,我們選擇使用 Go 來搭建后臺服務(wù),Why Go ?其實(shí)真相是:不是我們選擇了 Go ,是 Go 面向我們,選擇了我們。出身首先 ,不得不說一下 Go 的作者(僅選了三個

我發(fā)現(xiàn)我花了四年時間錘煉自己用 C 語言構(gòu)建系統(tǒng)的能力,試圖找到一個規(guī)范,可以更好的編寫軟件。結(jié)果發(fā)現(xiàn)只是對 Go 的模仿。缺乏語言層面的支持,只能是一個拙劣的模仿。

這是云風(fēng)在博客中說過的一句話。最近開始做一個很有意思的個人項(xiàng)目,我們選擇使用 Go 來搭建后臺服務(wù),Why Go ?其實(shí)真相是:不是我們選擇了 Go ,是 Go 面向我們,選擇了我們。

出身

首先 ,不得不說一下 Go 的作者(僅選了三個代表):

  • Ken Thompson

  • Rob Pike

  • Robert Griesemer

Ken Thompson 大家肯定不陌生,設(shè)計(jì)了 B 語言和 C 語言,Unix 之父,1983年圖領(lǐng)獎得主,Ken 老爺子在2000年的時候離開了貝爾實(shí)驗(yàn)室,轉(zhuǎn)行飛行員!!!后來加入了 Google,順手寫了個 Go 。 這里 有 Ken 和他的好基友 Denise M. Ritchie的故事。

上面應(yīng)該有一張 Ken 和 Denise 的合照,如果顯示不出來,你可能被墻了,自救吧

Rob Pike 參與 Plan9 和 Inferno 操作系統(tǒng)開發(fā),Unix 小組成員。

Robert,曾協(xié)助制作Java的HotSpot編譯器和Chrome瀏覽器的JavaScript引擎V8。

按照這個配置,Go 出身于 Google,師出名門加上牛逼哄哄的作者們,語言界的富二代。

語言的設(shè)計(jì)者,很大程度決定了語言的設(shè)計(jì)哲學(xué)。在學(xué)習(xí) Go 的過程中,你會感覺到這門語言如此的簡潔優(yōu)雅,但是又不簡單。

設(shè)計(jì)哲學(xué)和特性

來說一下語言的設(shè)計(jì)哲學(xué)和特性(并不想拆開講解)。

少即是多。跟 C++ 不同的是, Go 沒有盡可能多的包含所有的特性,這只會增加了語言自身的復(fù)雜性,提高了學(xué)習(xí)成本。Go 盡可能保持簡單,甚至摒棄了繼承這一特性。使用過 Java 的程序員對此可能略感不適,畢竟在面向?qū)ο蟮木幊棠P椭?,繼承是非常常用的策略。而 Go 選擇使用簡單的組合的方式來構(gòu)建復(fù)雜的類型,因?yàn)槔^承會提高軟件開發(fā)的復(fù)雜程度,以 Java 的集合類為例,多少學(xué)習(xí) Java 的人至今仍然道不出集合類之間的繼承關(guān)系。多用組合,少用繼承,Go 放棄了看似強(qiáng)大的語言特性,把這一理念實(shí)踐的非常徹底。

編碼規(guī)范。有些人覺得代碼規(guī)范被設(shè)計(jì)到語言本身會很奇怪,限制了語言。但實(shí)際上,Go 直接在語言層面加以約束,意義重大。曾幾何時,團(tuán)隊(duì)會因?yàn)檎Z言的 code style 而爭論不休,code format 需要團(tuán)隊(duì)通過政策來約束,code review 可能也會因?yàn)榇a格式的問題而爭吵的面紅耳赤。Go 作為互聯(lián)網(wǎng)時代的一門語言,可以讓全世界的 Go programmer 的代碼風(fēng)格保持一致,減少了無意義的爭論,對于共享和合作意義重大。

設(shè)計(jì)規(guī)則靈活。Go 是一門多范式的編程語言。Go 開發(fā)者可以自由發(fā)揮。

面向接口編程。這也是大型軟件系統(tǒng)的一種設(shè)計(jì)哲學(xué),面向抽象,而非面向?qū)崿F(xiàn)。Go 的接口是duck類型,鴨子類型在 ruby 中非常常見。它講述的是如果一只鳥走起路來像鴨子,游泳也像鴨子,叫起來也像鴨子,那么這只鳥就是鴨子。因此 Go 的接口定義是隱式的,非侵入性的。它關(guān)注的不是對象(當(dāng)然在 Go 中我們稱之為 struct )的類型本身,而是如何使用。

異常處理和防御性編程。非常明顯的一點(diǎn)是 Go 的函數(shù)調(diào)用對 error 的檢查,雖然讓代碼可能并不美觀,但是為了實(shí)用性,這種級別的代碼防御也是可以接受的,減少不安全的代碼。

實(shí)踐理念。Go 自身提供了豐富的 CLI,幾乎涵蓋了整個軟件的生命周期,例如開發(fā),測試,部署,維護(hù)等環(huán)節(jié)。寫 Go 的時候,不再需要額外的IDE或者是工具在組織代碼,構(gòu)建,編譯,測試。這省去了很多麻煩,節(jié)省了開發(fā)者寶貴的時間。我們只需要關(guān)注代碼本身即可。

以上主要是關(guān)于 Go 的設(shè)計(jì)哲學(xué),其中摻雜的提到了一些特性。其實(shí) Go 還有很多特性值得我們?nèi)ニ伎?Go 為何這樣設(shè)計(jì),比如:與 C 語言的集成 CGo 這種語言間的交互性;匿名函數(shù)和閉包;函數(shù)多返回值;豐富的類型系統(tǒng);自動的 gc( gc 的鼻祖應(yīng)該是 lisp, 被 Java 發(fā)揮的爐火純青,v8 因有優(yōu)秀的 gc 性能得以大幅度提升,雖然這不是 Go 的專利,但是這卻讓開發(fā)者省了不少心);包管理;單元測試規(guī)范;并發(fā)和分布式;開發(fā)和執(zhí)行效率;同樣的支持跨平臺;對網(wǎng)絡(luò)開發(fā)有非常好的支持,不需要使用框架也可以很快的開發(fā)一個 web 程序。這些特性很多都不是 Go 的專利,但是 Go 卻有限的進(jìn)行了吸收和發(fā)揮。

總之,Go 被稱為21世紀(jì)的 C 語言名副其實(shí),正因如此,在我們的新項(xiàng)目中,不管是從語言本身,團(tuán)隊(duì)協(xié)作,部署成本,性能等各個方面考慮,Go 是我們的不二選擇,當(dāng)然,Go 開發(fā)者現(xiàn)在并不是很多(比如相對于爛大街的 Java),但是我有理由相信,越來越多的人也會像我一樣,被 Go 所吸引,并且也選擇 Go 。


發(fā)佈手記

熱門詞條