你好吵护,Go語(yǔ)言

本文是「vangoleo的Go語(yǔ)言學(xué)習(xí)筆記」系列文章之一盒音。
官網(wǎng): http://www.vangoleo.com/go/hello-golang/

我在2015年第一次接觸Go語(yǔ)言,完成了Hello World馅而,隨后也一直在關(guān)注這門(mén)新語(yǔ)言祥诽。至今,Go語(yǔ)言發(fā)展已經(jīng)過(guò)去十年多了瓮恭,越來(lái)越受到廣大開(kāi)發(fā)者的關(guān)注雄坪,而且隨著云原生、IoT屯蹦、區(qū)塊鏈的流行维哈,Go似乎要成為21世紀(jì)的第一語(yǔ)言绳姨。Docker、Kubernetes阔挠、以太坊等重量級(jí)的項(xiàng)目都是基于Go開(kāi)發(fā)飘庄。

Go語(yǔ)言是Google公司在2009年開(kāi)源的一門(mén)高級(jí)編程語(yǔ)言,它為解決大型系統(tǒng)開(kāi)發(fā)過(guò)程中的實(shí)際問(wèn)題而設(shè)計(jì)购撼,支持并發(fā)跪削、規(guī)范統(tǒng)一、簡(jiǎn)單優(yōu)雅迂求,性能強(qiáng)大碾盐,被很多Go語(yǔ)言傳道者譽(yù)為“云計(jì)算時(shí)代的C語(yǔ)言”。

近期揩局,我在系統(tǒng)地學(xué)習(xí)Go語(yǔ)言毫玖,并整理了一些學(xué)習(xí)筆記。后續(xù)會(huì)和大家進(jìn)行分享谐腰。今天先和大家聊聊Go語(yǔ)言的發(fā)展史和Go語(yǔ)言的特點(diǎn)孕豹。

Go的命名

Go語(yǔ)言的命名

這是一封由Rob Pike在2007年9月25日,下午3:12發(fā)送給Robert Griesemer和Ken Thompson的有關(guān)編程語(yǔ)言討論主題的郵件十气,郵件正文大意為:

我在開(kāi)車(chē)回家的路上得到了些靈感:

  • 給這門(mén)編程語(yǔ)言取名為“go”,它很簡(jiǎn)短春霍,易書(shū)寫(xiě)砸西。
  • 工具類可以命名為:goc、 gol址儒、goa芹枷。
  • 交互式的調(diào)試工具也可以直接命名為“go”。
  • 語(yǔ)言文件后綴名為 .go 等等莲趣。

和很多偉大的公司誕生于車(chē)庫(kù)一樣鸳慈,Go語(yǔ)言的命名也和汽車(chē)有關(guān)。以上就是Go語(yǔ)言名字的來(lái)源喧伞。我個(gè)人是很喜歡Go這個(gè)命名的走芋,看似很隨意的一個(gè)想法,卻很精準(zhǔn)潘鲫。有著Google的純正血統(tǒng)翁逞,又體現(xiàn)了語(yǔ)言簡(jiǎn)單,優(yōu)雅的特點(diǎn)溉仑。而且Go里面開(kāi)啟一個(gè)協(xié)程的關(guān)鍵字就是go挖函。

谷歌工程師的20%時(shí)間

自此之后Robert、Rob和Ken三個(gè)人開(kāi)始在Google內(nèi)部進(jìn)行了研發(fā)浊竟,一直到了2009年怨喘,Go正式開(kāi)源了津畸,Go項(xiàng)目團(tuán)隊(duì)將2009年11月10 日,即該語(yǔ)言正式對(duì)外開(kāi)源的日字作為其官方生日必怜。源代碼最初托管在http://code.google.com上肉拓,之后幾年才逐步的遷移到 GitHub上。
谷歌的“20%時(shí)間”工作方式棚赔,允許工程師拿出20%的時(shí)間來(lái)研究自己喜歡的項(xiàng)目帝簇。語(yǔ)音服務(wù)Google Now、谷歌新聞Google News靠益、谷歌地圖Google Map上的交通信息等丧肴,全都是20%時(shí)間的產(chǎn)物。
Go語(yǔ)言最開(kāi)始也是20%時(shí)間的產(chǎn)物胧后。

Go語(yǔ)言的三位創(chuàng)始人

郵件中提到的就是Go語(yǔ)言最重要的3位創(chuàng)始人:


Go語(yǔ)言創(chuàng)始人

讓我們來(lái)認(rèn)識(shí)一下這3位大佬:

  • Rob Pike:曾是貝爾實(shí)驗(yàn)室Unix開(kāi)發(fā)團(tuán)隊(duì)成員芋浮,Plan9操作系統(tǒng)開(kāi)發(fā)的主要領(lǐng)導(dǎo)人,Inferno操作系統(tǒng)開(kāi)發(fā)的主要領(lǐng)導(dǎo)人壳快。
  • ken tomption:圖靈獎(jiǎng)得主纸巷,C語(yǔ)言前身B語(yǔ)言的作者,Unix的發(fā)明人之一眶痰,操作系統(tǒng)Plan 9的主要作者瘤旨。 共同開(kāi)發(fā)了UTF-8。
  • Robert:曾為谷歌的V8 JavaScript引擎和Chubby開(kāi)發(fā)代碼竖伯。

Go語(yǔ)言血統(tǒng)

編程語(yǔ)言的發(fā)展存哲,和物種進(jìn)化類似。每種編程語(yǔ)言都會(huì)從先前的語(yǔ)言吸取精華七婴,再進(jìn)行創(chuàng)新和改進(jìn)祟偷。下圖展示了Go從它的前輩們繼承了哪些優(yōu)點(diǎn),Go正是站在這些巨人的肩膀上打厘,在云時(shí)代修肠,發(fā)揮越來(lái)越大的作用。


Go語(yǔ)言站在巨人的肩膀上

Go語(yǔ)言從前輩們繼承的特點(diǎn):

  • C語(yǔ)言:Go語(yǔ)言有時(shí)候被描述為“C類似語(yǔ)言”户盯,或者是“21世紀(jì)的C語(yǔ)言”嵌施。Go從C語(yǔ)言繼承了相似的表達(dá)式語(yǔ)法、控制流結(jié)構(gòu)先舷、基礎(chǔ)數(shù)據(jù)類型艰管、調(diào)用參數(shù)傳值、指針等很多思想蒋川,還有C語(yǔ)言一直所看中的編譯后機(jī)器碼的運(yùn)行效率以及和現(xiàn)有操作系統(tǒng)的無(wú)縫適配牲芋。
  • Pascal:但是在Go語(yǔ)言的家族樹(shù)中還有其它的祖先。其中一個(gè)有影響力的分支來(lái)自Niklaus Wirth所設(shè)計(jì)的 Pascal)語(yǔ)言。然后Modula-2語(yǔ)言激發(fā)了包的概念缸浦。然后Oberon)語(yǔ)言摒棄了模塊接口文件和模塊實(shí)現(xiàn)文件之間的區(qū)別夕冲。第二代的Oberon-2)語(yǔ)言直接影響了包的導(dǎo)入和聲明的語(yǔ)法,還有Oberon)語(yǔ)言的面向?qū)ο筇匦运峁┑姆椒ǖ穆暶髡Z(yǔ)法等裂逐。
  • CSP:Go語(yǔ)言的另一支祖先歹鱼,帶來(lái)了Go語(yǔ)言區(qū)別其他語(yǔ)言的重要特性,靈感來(lái)自于貝爾實(shí)驗(yàn)室的Tony Hoare于1978年發(fā)表的鮮為外界所知的關(guān)于并發(fā)研究的基礎(chǔ)文獻(xiàn)卜高,順序通信進(jìn)程(communicating sequential processes 弥姻,縮寫(xiě)為CSP)。在CSP中掺涛,程序是一組中間沒(méi)有共享狀態(tài)的平行運(yùn)行的處理過(guò)程庭敦,它們之間使用管道進(jìn)行通信和控制同步。不過(guò)Tony Hoare的CSP只是一個(gè)用于描述并發(fā)性基本概念的描述語(yǔ)言薪缆,并不是一個(gè)可以編寫(xiě)可執(zhí)行程序的通用編程語(yǔ)言秧廉。Go語(yǔ)言使用管道在協(xié)程進(jìn)進(jìn)行通信

重量級(jí)應(yīng)用

如下是列舉的一些Go語(yǔ)言的重量級(jí)應(yīng)用:


Go語(yǔ)言重量級(jí)應(yīng)用

Go的優(yōu)點(diǎn)

如果現(xiàn)實(shí)世界需要我能夠在幾天內(nèi)對(duì)一個(gè)生產(chǎn)系統(tǒng)進(jìn)行原型設(shè)計(jì)拣帽、測(cè)試和部署疼电,而且在每秒能處理比原來(lái)多5倍請(qǐng)求,CPU和內(nèi)存的開(kāi)銷還都很小减拭。我想大概只有Go語(yǔ)言可以勝任了蔽豺。

Go語(yǔ)言有如下優(yōu)點(diǎn):

  • 單獨(dú)的二進(jìn)制發(fā)布:Go項(xiàng)目編譯會(huì)生成一個(gè)靜態(tài)的可執(zhí)行文件。該文件可獨(dú)立運(yùn)行而不需要其他依賴拧粪。這種方式特別適合于云原生容器環(huán)境茫虽。
  • 交叉編譯:在任何操作系統(tǒng)上都可以編譯在其他平臺(tái)上可運(yùn)行的二進(jìn)制文件。比如在Mac系統(tǒng)上可編譯出在Linux和Windows上可運(yùn)行的二進(jìn)制文件既们。
  • 垃圾回收:Go語(yǔ)言支持垃圾回收。相比較正什,C++啥纸,Rust等需要開(kāi)發(fā)者自己控制。
  • 執(zhí)行性能:Go非常的快婴氮。性能接近于C++斯棒。遠(yuǎn)高于Java,Python主经、Node荣暮。
  • 開(kāi)發(fā)效率:Go語(yǔ)言同時(shí)具備靜態(tài)語(yǔ)言的運(yùn)行性能和動(dòng)態(tài)語(yǔ)言的開(kāi)發(fā)效率。
  • 簡(jiǎn)單罩驻,高效:Go語(yǔ)言的設(shè)計(jì)哲學(xué)里就包括了簡(jiǎn)單和高效穗酥。一個(gè)典型的反例就是復(fù)雜,臃腫的Java語(yǔ)言。
  • 并發(fā)性:語(yǔ)言層面支持并發(fā)砾跃,通過(guò)協(xié)程和通道簡(jiǎn)化并發(fā)開(kāi)發(fā)骏啰,提高并發(fā)性能。
  • 豐富的標(biāo)準(zhǔn)庫(kù):Go標(biāo)準(zhǔn)庫(kù)覆蓋了文本抽高,IO判耕,網(wǎng)絡(luò),加密翘骂,Web服務(wù)壁熄,遠(yuǎn)程RPC,模板引擎等功能碳竟。
  • 可以調(diào)用C語(yǔ)言:可以調(diào)用C語(yǔ)言函數(shù)草丧,進(jìn)一步優(yōu)化性能,復(fù)用C語(yǔ)言龐大的生態(tài)系統(tǒng)瞭亮。
  • 快速編譯時(shí)間:Go的編譯特別快方仿。大家可以參考兩款靜態(tài)博客生成系統(tǒng),Hexo(Node開(kāi)發(fā))和Hugo(Go開(kāi)發(fā))统翩。
  • 工程型:Go語(yǔ)言設(shè)計(jì)的目的就是成為一門(mén)工程語(yǔ)言仙蚜,解決實(shí)際的工程問(wèn)題。Go語(yǔ)言定義了開(kāi)發(fā)規(guī)范厂汗,并提供了豐富的工具委粉。使用Go語(yǔ)言可以編寫(xiě)出容易閱讀和理解,容易測(cè)試娶桦、維護(hù)和擴(kuò)展的程序贾节。

Go缺點(diǎn)

  • 缺少重量級(jí)框架。如Ruby的Rails衷畦,Python的Django栗涂,Java的Spring。
  • 錯(cuò)誤處理:沒(méi)有異常系統(tǒng)祈争。Go官方正在解決該問(wèn)題斤程。
  • 軟件包管理:很長(zhǎng)時(shí)間以來(lái),Go官方都沒(méi)有一套軟件包管理體制菩混。直到最近忿墅,Go的1.13版本正式引入了Go Module作為官方的依賴管理工具。
  • 不是標(biāo)準(zhǔn)的面向?qū)ο蟮木幊棠P停哼@個(gè)也是Go語(yǔ)言的一個(gè)創(chuàng)新沮峡。如果你是堅(jiān)實(shí)的OOP的擁護(hù)者疚脐,可能會(huì)有些不適應(yīng)。

文化

人們說(shuō)邢疙,每當(dāng)你學(xué)習(xí)一門(mén)新的口語(yǔ)時(shí)棍弄,你也會(huì)沉浸在說(shuō)這種語(yǔ)言的人的某些文化中望薄。因此,您學(xué)習(xí)的語(yǔ)言越多照卦,您可能會(huì)有更多的變化式矫。
編程語(yǔ)言也是如此。無(wú)論您將來(lái)如何應(yīng)用新的編程語(yǔ)言役耕,它總能給你帶來(lái)新的編程視角或某些特別的技術(shù)采转。
無(wú)論是函數(shù)式編程,模式匹配還是原型繼承瞬痘,一旦你學(xué)會(huì)了它們故慈,你就可以隨身攜帶這些編程思想,這擴(kuò)展了你作為軟件開(kāi)發(fā)人員所擁有的問(wèn)題解決工具集框全。它們也改變了你閱讀高質(zhì)量代碼的方式察绷。
而Go在這方面有一項(xiàng)了不起的財(cái)富。Go文化的主要支柱是保持簡(jiǎn)單津辩,腳踏實(shí)地的代碼拆撼,而不會(huì)產(chǎn)生許多冗余的抽象概念,并將可維護(hù)性放在首位喘沿。大部分時(shí)間花費(fèi)在代碼的編寫(xiě)工作上闸度,而不是在修補(bǔ)工具和環(huán)境或者選擇不同的實(shí)現(xiàn)方式上,這也是Go文化的一部分蚜印。
Go文化也可以總結(jié)為:“應(yīng)當(dāng)只用一種方法去做一件事莺禁,并保持簡(jiǎn)單,高效”窄赋。

一點(diǎn)注意事項(xiàng)哟冬。當(dāng)你需要構(gòu)建相對(duì)復(fù)雜的抽象代碼時(shí),Go通常會(huì)妨礙你忆绰。好吧浩峡,我會(huì)說(shuō)這是簡(jiǎn)單的權(quán)衡。

本文由 www.vangoleo.com 發(fā)布

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末错敢,一起剝皮案震驚了整個(gè)濱河市红符,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌伐债,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件致开,死亡現(xiàn)場(chǎng)離奇詭異峰锁,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)双戳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)虹蒋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事魄衅∏涂ⅲ” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵晃虫,是天一觀的道長(zhǎng)皆撩。 經(jīng)常有香客問(wèn)我,道長(zhǎng)哲银,這世上最難降的妖魔是什么扛吞? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮荆责,結(jié)果婚禮上滥比,老公的妹妹穿的比我還像新娘。我一直安慰自己做院,他們只是感情好盲泛,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著键耕,像睡著了一般寺滚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上郁竟,一...
    開(kāi)封第一講書(shū)人閱讀 51,521評(píng)論 1 304
  • 那天玛迄,我揣著相機(jī)與錄音,去河邊找鬼棚亩。 笑死蓖议,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的讥蟆。 我是一名探鬼主播勒虾,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼瘸彤!你這毒婦竟也來(lái)了修然?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤质况,失蹤者是張志新(化名)和其女友劉穎愕宋,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體结榄,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡巾兆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年舶赔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了籍救。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蝎土,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出绣否,到底是詐尸還是另有隱情誊涯,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布蒜撮,位于F島的核電站暴构,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏淀弹。R本人自食惡果不足惜丹壕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望薇溃。 院中可真熱鬧菌赖,春花似錦、人聲如沸沐序。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)策幼。三九已至邑时,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間特姐,已是汗流浹背晶丘。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留唐含,地道東北人浅浮。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像捷枯,于是被迫代替她去往敵國(guó)和親滚秩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Go 語(yǔ)言誕生于谷歌苟径,由計(jì)算機(jī)領(lǐng)域的三位宗師級(jí)大牛 Rob Pike哩掺、Ken Thompson 和 Robert ...
    猿天下閱讀 16,059評(píng)論 30 159
  • 用更少的代碼嚼吞,更短的編譯時(shí)間,創(chuàng)建運(yùn)行更快的程序蹬碧,享受更多的樂(lè)趣舱禽。 起源與發(fā)展 Go 語(yǔ)言起源 2007 年,并于...
    遼A丶孫悟空閱讀 1,966評(píng)論 0 22
  • 1 Go語(yǔ)言的主要特性與發(fā)展的環(huán)境和影響因素 關(guān)于視頻教程的進(jìn)展恩沽,由于最近感冒而且項(xiàng)目比較忙誊稚,導(dǎo)致視頻教程的事情延...
    me_2f11閱讀 606評(píng)論 0 19
  • 健康的甜品,在餐飲市場(chǎng)更受歡迎罗心,瑪麗蓮甜品加盟市場(chǎng)大里伯,盈利更簡(jiǎn)單。每一份產(chǎn)品都堅(jiān)持純手工渤闷,現(xiàn)做疾瓮、現(xiàn)煮、現(xiàn)賣(mài)飒箭。甜品加...
    進(jìn)月少女的禮儀閱讀 390評(píng)論 0 0
  • 《夏天》 那年夏天狼电,我們還小 小到經(jīng)常 熱愛(ài)同一個(gè)女孩 從光影斑駁 到深夜,是你 是你弦蹂,都是你 那年夏天肩碟,真...
    浩子88閱讀 334評(píng)論 0 3