這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。Go語言的崛起?
英文原文:Google's Go Programming Language Grows Up: Now What?
我們這個世界真的需要另外一種C語言風格的程式設計語言嗎?很顯然,Google很早就這麼認為了,在 2009 年,它借用雷蒙斯樂隊的歌“Hey!Ho!Let’s Go”,正式推出了 Go 語言。現在 Go 語言Team Dev已經開發出了這種語言的第一個穩定版本,他們稱之為 Go 1,他們將這種語言推向世界,希望人們用這種語言“開發出健壯的軟體產品和作品。”那麼,現在人們對這種語言的使用方式又是如何呢?
讓我們先回顧一下,什麼是 Go 語言,是什麼促使Google決定推出這樣一種語言?按 Go 語言的“常見問題”裡的說法,自從那個“重要的系統級程式設計語言”誕生距今已超過十幾年了,這段時間電腦世界已經發生了很大的變化。Google的才人們對目前現有的各種語言深感失望,他們必須要在“快速的編譯、快速的執行或簡單編程”之間做出選擇。“沒有一種主流的程式設計語言,例如C,C++,Java,Python 等,能提供Google人想要的全部特徵。
於是,Google的工程師從 2007 年起開始開發 Go 語言。“常見問題”裡這樣說:Go 語言在基本文法上”基本上屬於C語言家族“,但它從 Pascal 語系吸收了”大量的理念“,還有一些思想是來自其它的語言。但對於程式員來說,應該把它當成一種全新的語言,一種以”讓程式員更有效率,讓編程更有效率,至少是讓我們更有效率並且使編程更有樂趣“的理念為設計目標的程式設計語言。
Go 語言擅長做什麼…?
那麼,Go 語言擅長做什嗎?根據Google著名的軟體工程師——Go 語言的設計人之一——Rob Pike 的說法,它是用來開發”大型軟體“的。
Pike 說 Go 語言適合於”很多程式員一起開發的大型軟體,並且開發週期較長,支援雲端運算的網路服務:簡言之,就是服務端軟體。Go 語言能夠讓程式員快速開發,並且在軟體不斷的增長過程中,它能讓程式員更容易地進行維護和修改。它融合了傳統編譯型語言的高效性和指令碼語言的易用性和富於表達性。“(作為原貝爾實驗室 Unix 開發小組成員,Pike 對系統軟體有相當的認識。)
但對於其它類型的軟體,Go 語言也一樣的好用。例如,我在 Google+ 上詢問了 Go 語言的使用者,得到了 Douglas Fils 的回複,他正在拿各種語言做實驗。
Fils 說他現在有時會開發一些 Web 應用程式,大多數都是在 JAVA 虛擬機器(JVM)平台上。“所以 Java 自然是最常用的。我最近開始嘗試更多的語言,例如 Scala 和 Groovy。我用 Groovy 語言已經開發了不少的東西,而且剛剛完成了一個 Groovy/Grails 語言上的大型項目。我還研究了一下 Ruby on Rails/Python (Python 架構),並用它們做了一些東西。”
他說他用早期版本的 Go 語言開發了一個 Web 介面來處理資料資源。但很不幸。“當時的 Go 的程式庫和文法使得開發起來很困難。我還嘗試了 node.js,而且,到了一月份,我的精力完全轉向了 node.js.”
Node.js,Fils 說,很流行,“雖然我很喜歡它,但它的單線程事件迴圈機制和非阻塞的編程模式讓我不太滿意。還有,所有的東西都要用 Javascript 的回呼函數,我不喜歡這樣。”很顯然,他不是一個 JavaScript 的粉絲。Go 語言的文法和結構,從另一方面講,“還是很簡潔的。”
當 Go 語言的文法和結構趨於穩定,並發布了 Go 1 時,他覺得應該轉回來,重寫他的 Go 語言程式。這回,他想起來了當初為什麼想用 Go 來開發。
關於 Go 語言的爭論
Fils 說,在 Java 裡,很多東西都需要有一定的模板套路,這是很討厭。他說 Scala 和 Groovy 要好一些,但仍然是個問題。
Go 語言給人的感覺像一個動態類型化語言,Fils 說,但 Go 語言裡靜態類型特徵並不像 Java 裡那樣明顯。
Go 語言的垃圾收集管理,比 JVM 要好的多。跟 Groovy 這樣的動態語言比起來尤其能看出這點。
Fils 在評論中說 Go 語言的速度比其它語言快很多倍。它運行速度快但不影響負載量。它編譯所需的時間很短,他在開發時能邊開發邊編譯,就像動態語言那樣迅速。
最後,他說使用 Go 語言要比使用 Node.js,Java 或以 Java 為基礎的語言,Ruby on Rails 等語言要有趣的多。在開發 JVM 平台上的應用時,我總感覺自己是一個系統管理員,而不是一個開發人員。我要修改堆空間,我要研究負載平衡或記憶體問題或其它的資源管理問題。而使用 Go 語言,我不需要考慮這些。我開發,編譯,測試,運行,部署,非常的享受。
請注意,並不是所有的人都喜歡 Go 語言。你可以看一看 Shaneal Manek 的關於 Go 語言的垃圾收集系統以及指令碼語言和編譯型語言之間比較的評論。
Go 語言能走向主流嗎?
你的期望是什嗎?按照 RedMonk’s Stephen O’Grady 的說法,對於 Go 語言來說現在還非常年輕。通常,程式員會分成兩個陣營:要麼歡迎底層語言和指令碼型/垃圾收集器型語言的融合,要麼是反對這樣做。對於後者,毫無意外的,他們是C語言的堅定擁護者。
圍繞著 Go 語言有很多的爭論,這不令人吃驚,任何一種語言都是這樣。而令人吃驚的是目前 Go 語言在程式員中獲得了相當的吸引力。O’Grady 二月份在 RedMonk 程式設計語言分級中把 Go 語言放入了第二梯隊。但是,他說,考慮一下 Go 語言是如此的年輕,“即使是目前這種成績也是讓人相當的印象深刻了。”
Google已經發布了 Go 語言的穩定版本,並且在 Google App Engine 支援部署這種語言的應用,這將給 Go 語言帶來更多的吸引力。
Go 語言能否成為一種“主流”語言,這需要由時間來判定。不過,看起來除Google之外還有很多公司對這種語言也高度興趣,比如 Engine Yard 等公司。那些對目前的現存的語言不太滿意的程式員大概對 Go 語言都在拭目以待。
如果你在使用 Go 語言或之前簡單涉略過它,你需要注意,Go 1 版引入了不少的變化。然而從 Go 1 版開始,Go 語言的變化將會遵循它的規格說明書進行。根據 Go 語言的開發人員的透露,“也許在某個時間,我們會推出 Go 2 的規範,但在此之前,用 Go 語言編寫的程式在今後的 Go 1 版本(Go 1.1, Go 1.2 等)上都能正確的運行。”
你用 Go 語言開發過什麼項目嗎?給我們說說你對 Go 語言的感覺,它是否是一個有未來的語言?