我們這個(gè)世界真的需要另外一種C語言風(fēng)格的編程語言嗎?很顯然,谷歌很早就這么認(rèn)為了,在 2009 年,它借用雷蒙斯樂隊(duì)的歌“Hey!Ho!Let’s Go”,正式推出了 Go 語言?,F(xiàn)在 Go 語言開發(fā)團(tuán)隊(duì)已經(jīng)開發(fā)出了這種語言的第一個(gè)穩(wěn)定版本,他們稱之為 Go 1,他們將這種語言推向世界,希望人們用這種語言“開發(fā)出健壯的軟件產(chǎn)品和作品?!蹦敲?,現(xiàn)在人們對(duì)這種語言的使用情況又是如何呢?讓我們先回顧一下,什么是 Go 語言,是什么促使谷歌決定推出這樣一種語言?按 Go 語言的“常見問題”里的說法,自從那個(gè)“重要的系統(tǒng)級(jí)編程語言”誕生距今已超過十幾年了,這段時(shí)間計(jì)算機(jī)世界已經(jīng)發(fā)生了很大的變化。谷歌的才人們對(duì)目前現(xiàn)有的各種語言深感失望,他們必須要在“快速的編譯、快速的執(zhí)行或簡(jiǎn)單編程”之間做出選擇?!皼]有一種主流的編程語言,例如C,C++,Java,Python 等,能提供谷歌人想要的全部特征。于是,谷歌的工程師從 2007 年起開始開發(fā) Go 語言。“常見問題”里這樣說:Go 語言在基本語法上”基本上屬于C語言家族“,但它從 Pascal 語系吸收了”大量的理念“,還有一些思想是來自其它的語言。但對(duì)于程序員來說,應(yīng)該把它當(dāng)成一種全新的語言,一種以”讓程序員更有效率,讓編程更有效率,至少是讓我們更有效率并且使編程更有樂趣“的理念為設(shè)計(jì)目標(biāo)的編程語言。Go 語言擅長(zhǎng)做什么…?那么,Go 語言擅長(zhǎng)做什么?根據(jù)谷歌著名的軟件工程師——Go 語言的設(shè)計(jì)人之一——Rob Pike 的說法,它是用來開發(fā)”大型軟件“的。Pike 說 Go 語言適合于”很多程序員一起開發(fā)的大型軟件,并且開發(fā)周期較長(zhǎng),支持云計(jì)算的網(wǎng)絡(luò)服務(wù):簡(jiǎn)言之,就是服務(wù)端軟件。Go 語言能夠讓程序員快速開發(fā),并且在軟件不斷的增長(zhǎng)過程中,它能讓程序員更容易地進(jìn)行維護(hù)和修改。它融合了傳統(tǒng)編譯型語言的高效性和腳本語言的易用性和富于表達(dá)性?!?作為原貝爾實(shí)驗(yàn)室 Unix 開發(fā)小組成員,Pike 對(duì)系統(tǒng)軟件有相當(dāng)?shù)恼J(rèn)識(shí)。)但對(duì)于其它類型的軟件,Go 語言也一樣的好用。例如,我在 Google+ 上詢問了 Go 語言的使用者,得到了 Douglas Fils 的回復(fù),他正在拿各種語言做實(shí)驗(yàn)。Fils 說他現(xiàn)在有時(shí)會(huì)開發(fā)一些 Web 應(yīng)用程序,大多數(shù)都是在 Java 虛擬機(jī)(JVM)平臺(tái)上?!八?Java 自然是最常用的。我最近開始嘗試更多的語言,例如 Scala 和 Groovy。我用 Groovy 語言已經(jīng)開發(fā)了不少的東西,而且剛剛完成了一個(gè) Groovy/Grails 語言上的大型項(xiàng)目。我還研究了一下 Ruby on Rails/Python (Python 框架),并用它們做了一些東西?!彼f他用早期版本的 Go 語言開發(fā)了一個(gè) Web 界面來處理數(shù)據(jù)資源。但很不幸。“當(dāng)時(shí)的 Go 的程序庫和語法使得開發(fā)起來很困難。我還嘗試了 node.js,而且,到了一月份,我的精力完全轉(zhuǎn)向了 node.js.”Node.js,F(xiàn)ils 說,很流行,“雖然我很喜歡它,但它的單線程事件循環(huán)機(jī)制和非阻塞的編程模式讓我不太滿意。還有,所有的東西都要用 Javascript 的回調(diào)函數(shù),我不喜歡這樣?!焙茱@然,他不是一個(gè) JavaScript 的粉絲。Go 語言的語法和結(jié)構(gòu),從另一方面講,“還是很簡(jiǎn)潔的?!碑?dāng)Go 語言的語法和結(jié)構(gòu)趨于穩(wěn)定,并發(fā)布了 Go 1 時(shí),他覺得應(yīng)該轉(zhuǎn)回來,重寫他的 Go 語言程序。這回,他想起來了當(dāng)初為什么想用 Go 來開發(fā)。關(guān)于Go 語言的爭(zhēng)論Fils 說,在 Java 里,很多東西都需要有一定的模板套路,這是很討厭。他說 Scala 和 groovy 要好一些,但仍然是個(gè)問題。Go 語言給人的感覺像一個(gè)動(dòng)態(tài)的類型化語言,F(xiàn)ils 說,但 Go 語言里靜態(tài)類型特征并不像 Java 里那樣明顯。Go 語言的垃圾收集管理,比 JVM 要好的多。跟 Groovy 這樣的動(dòng)態(tài)語言比起來尤其能看出這點(diǎn)。Fils 在評(píng)論中說 Go 語言的速度比其它語言快很多倍。它運(yùn)行速度快但不影響負(fù)載量。它編譯所需的時(shí)間很短,他在開發(fā)時(shí)能邊開發(fā)邊編譯,就像動(dòng)態(tài)語言那樣迅速。最后,他說使用 Go 語言要比使用 Node.js,Java 或以 Java 為基礎(chǔ)的語言,Ruby on Rails 等語言要有趣的多。在開發(fā) JVM 平臺(tái)上的應(yīng)用時(shí),我總感覺自己是一個(gè)系統(tǒng)管理員,而不是一個(gè)開發(fā)者。我要修改堆空間,我要研究負(fù)載均衡或內(nèi)存問題或其它的資源管理問題。而使用 Go 語言,我不需要考慮這些。我開發(fā),編譯,測(cè)試,運(yùn)行,部署,非常的享受。請(qǐng)注意,并不是所有的人都喜歡 Go 語言。你可以看一看 Shaneal Manek 的關(guān)于 Go 語言的垃圾收集系統(tǒng)以及腳本語言和編譯型語言之間比較的評(píng)論。Go 語言能走向主流嗎?你的期望是什么?按照 RedMonk’s Stephen O’Grady 的說法,對(duì)于 Go 語言來說現(xiàn)在還非常年輕。通常,程序員會(huì)分成兩個(gè)陣營:要么歡迎底層語言和腳本型/垃圾收集器型語言的融合,要么是反對(duì)這樣做。對(duì)于后者,毫無意外的,他們是C語言的堅(jiān)定擁護(hù)者。圍繞著 Go 語言有很多的爭(zhēng)論,這不令人吃驚,任何一種語言都是這樣。而令人吃驚的是目前 Go 語言在程序員中獲得了相當(dāng)?shù)奈?。O’Grady 二月份在 RedMonk 編程語言分級(jí)中把 Go 語言放入了第二梯隊(duì)。但是,他說,考慮一下 Go 語言是如此的年輕,“即使是目前這種成績(jī)也是讓人相當(dāng)?shù)挠∠笊羁塘恕!惫雀枰呀?jīng)發(fā)布了 Go 語言的穩(wěn)定版本,并且在 Google App Engine 支持部署這種語言的應(yīng)用,這將給 Go 語言帶來更多的吸引力。Go 語言能否成為一種“主流”語言,這需要由時(shí)間來判定。不過,看起來除谷歌之外還有很多公司對(duì)這種語言也很感興趣,比如 Engine Yard 等公司。那些對(duì)目前的現(xiàn)存的語言不太滿意的程序員大概對(duì) Go 語言都在拭目以待。如果你在使用 Go 語言或之前簡(jiǎn)單涉略過它,你需要注意,Go 1 版引入了不少的變化。然而從 Go 1 版開始,Go 語言的變化將會(huì)遵循它的規(guī)格說明書進(jìn)行。根據(jù) Go 語言的開發(fā)人員的透露,“也許在某個(gè)時(shí)間,我們會(huì)推出 Go 2 的規(guī)范,但在此之前,用 Go 語言編寫的程序在今后的 Go 1 版本(Go 1.1, Go 1.2 等)上都能正確的運(yùn)行?!蹦阌肎o 語言開發(fā)過什么項(xiàng)目嗎?
10年專注成都網(wǎng)站制作,企業(yè)網(wǎng)站設(shè)計(jì),個(gè)人網(wǎng)站制作服務(wù),為大家分享網(wǎng)站制作知識(shí)、方案,網(wǎng)站設(shè)計(jì)流程、步驟,成功服務(wù)上千家企業(yè)。為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù),專注于企業(yè)網(wǎng)站設(shè)計(jì),高端網(wǎng)頁制作,對(duì)活動(dòng)板房等多個(gè)領(lǐng)域,擁有豐富的網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn)。
應(yīng)用于搭建 Web 服務(wù)器,存儲(chǔ)集群或類似用途的巨型中央服務(wù)器的系統(tǒng)編程語言。
Go 是谷歌的編程語言,而不是社區(qū)的。在這位博主看來,雖然 Go 語言擁有一個(gè)貢獻(xiàn)者社區(qū),但是它并不是社區(qū)的項(xiàng)目,只是谷歌的一個(gè)項(xiàng)目。所以只要是谷歌反對(duì)的東西,沒有人可以把這個(gè)東西加到 Go 語言中。
InfoQ 記者也第一時(shí)間聯(lián)系了《Go 并發(fā)編程實(shí)戰(zhàn)》作者、前輕松籌大數(shù)據(jù)負(fù)責(zé)人郝林,他的觀點(diǎn)是:Go 語言是大家的,只有偽愛好者才會(huì)談舍棄。在郝林看來,Go 語言官方團(tuán)隊(duì)在谷歌內(nèi)部實(shí)屬一個(gè)很小的團(tuán)隊(duì),但其成員幾乎個(gè)個(gè)都是技術(shù)大神。
很多社區(qū)成員為 Go 語言貢獻(xiàn)了很多重要并且有價(jià)值的東西,這些從貢獻(xiàn)者和提交者的多樣性就可以看出來。但谷歌作為整個(gè) Go 社區(qū)的守門人,它獨(dú)自決定什么東西可以被 Go 語言接受,什么不能被接受。
在 Go 語言模塊系統(tǒng)上發(fā)生的一件事情,谷歌 Go 語言核心團(tuán)隊(duì)的一名成員放棄了由外部 Go 社區(qū)開發(fā)的一個(gè)模塊系統(tǒng),因?yàn)樗褂昧肆硪环N不同的模型。Go 語言擁有一個(gè)貢獻(xiàn)者社區(qū),但是它并不是一個(gè)社區(qū)項(xiàng)目。
Go語言是谷歌推出的一種全新的編程語言,可以在不損失應(yīng)用程序性能的情況下降低代碼的復(fù)雜性。谷歌首席軟件工程師羅布派克(Rob Pike)說:我們之所以開發(fā)Go,是因?yàn)檫^去10多年間軟件開發(fā)的難度令人沮喪。
Go是谷歌2009發(fā)布的第二款編程語言。2009年7月份,谷歌曾發(fā)布了Simple語言,它是用來開發(fā)Android應(yīng)用的一種BASIC語言.
北京時(shí)間2010年1月10日,Go語言摘得了TIOBE公布的2009年年度大獎(jiǎng)。該獎(jiǎng)項(xiàng)授予在2009年市場(chǎng)份額增長(zhǎng)最多的編程語言。
谷歌資深軟件工程師羅布·派克(Rob Pike)表示,"Go讓我體驗(yàn)到了從未有過的開發(fā)效率。"派克表示,今天的C++或C一樣,Go是一種系統(tǒng)語言。他解釋道,"使用它可以進(jìn)行快速開發(fā),同時(shí)它還是一個(gè)真正的編譯語言,我們之所以現(xiàn)在將其開源,原因是我們認(rèn)為它已經(jīng)非常有用和強(qiáng)大。"
2007年,谷歌把Go作為一個(gè)20%項(xiàng)目開始研發(fā),即讓員工抽出本職工作之外時(shí)間的20%, 投入在該項(xiàng)目上。除了派克外,該項(xiàng)目的成員還有其他谷歌工程師也參與研發(fā)。
派克表示,編譯后Go代碼的運(yùn)行速度與C語言非常接近,而且編譯速度非???,就像在使用一個(gè)交互式語言?,F(xiàn)有編程語言均未專門對(duì)多核處理器進(jìn)行優(yōu)化。Go就是谷歌工程師為這類程序編寫的一種語言。它不是針對(duì)編程初學(xué)者設(shè)計(jì)的,但學(xué)習(xí)使用它也不是非常困難。Go支持面向?qū)ο?,而且具有真正的閉包(closures)和反射 (reflection)等功能。
在學(xué)習(xí)曲線方面,派克認(rèn)為Go與Java類似,對(duì)于Java開發(fā)者來說,應(yīng)該能夠輕松學(xué)會(huì) Go。之所以將Go作為一個(gè)開源項(xiàng)目發(fā)布,目的是讓開源社區(qū)有機(jī)會(huì)創(chuàng)建更好的工具來使用該語言,例如 Eclipse IDE中的插件。
在谷歌公開發(fā)布的所有網(wǎng)絡(luò)應(yīng)用中,均沒有使用Go,但是谷歌已經(jīng)使用該語言開發(fā)了幾個(gè)內(nèi)部項(xiàng)目。派克表示,Go是否會(huì)對(duì)谷歌即將推出的Chrome OS產(chǎn)生影響,還言之尚早,不過Go的確可以和Native Client配合使用。他表示"Go可以讓應(yīng)用完美的運(yùn)行在瀏覽器內(nèi)。"例如,使用Go可以更高效的實(shí)現(xiàn)Wave,無論是在前端還是后臺(tái)。
Go 同時(shí)具有兩種編譯器,一種是建立在GCC基礎(chǔ)上的Gccgo,另外一種是分別針對(duì)64位x64和32位x86計(jì)算機(jī)的一套編譯器(6g和8g)。谷歌目前正在研發(fā)其對(duì)ARM芯片和Android設(shè)備的支持。派克表示,"Android手機(jī)存在的問題是,我們一直沒有一個(gè)數(shù)學(xué)協(xié)處理器。"