這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
Go語言是一個新語言,截至目前為止,第一版正式版還沒有發布。Go語言的設計者是Robert Griesemer, Rob Pike和Ken Thompson,當年設計C和Unix,後來的Plan9團隊中的人 。Go語言的設計理念很明確,就是將動態類型語言的編程容易度和靜態類型語言的安全效率結合起來。深入瞭解Go語言的發展曆史以及完整的目標,請參考Go語言 FAQ。
Go語言有很濃厚的C的遺風,盡量屏蔽C++和Java的影響,比如沒有獨立的OO體系(並不是說不能OO),一切以struct為中心,沒有exceptions(Oh yes!),仍然有指標,等等。但是,Go語言又吸取了很多新語言的精華,並帶有自己獨特的設計。比如
1. 保留但大幅度簡化指標
Go語言保留著C中值和指標的區別,但是對於指標繁瑣用法進行了大量的簡化,引入引用的概念。所以在Go語言中,你幾乎不用擔心會因為直接操作內寸而引起各式各樣的錯誤。
2. 多參數返回
還記得在C裡面為了回饋多個參數,不得不開闢幾段指標傳到目標函數中讓其操作嗎?在Go裡面這是完全不必要的。而且多參數的支援讓Go無需使用繁瑣的exceptions體系,一個函數可以返回期待的傳回值加上error,調用函數後立刻處理錯誤資訊,清晰明了。
3. Array,slice,map等內建基本資料結構
如果你習慣了Python中簡潔的list和dict操作,在Go語言中,你不會感到孤單。一切都是那麼熟悉,而且更加高效。如果你是C++程式員,你會發現你又找到了STL的vector 和 map這對朋友。
4. Interface
Go語言最讓人讚歎不易的特性,就是interface的設計。任何資料結構,只要實現了interface所定義的函數,自動就implement了這個interface,沒有像Java那樣冗長的class申明,提供了靈活太多的設計度和OO抽象度,讓你的代碼也非常乾淨。千萬不要以為你習慣了Java那種一條一條加implements的方式,感覺還行,等介面的設計越來越複雜的時候,無數Bug正在後面等著你。
同時,正因為如此,Go語言的interface可以用來表示任何generic的東西,比如一個空的interface,可以是string可以是int,可以是任何資料類型,因為這些資料類型都不需要實現任何函數,自然就滿足空interface的定義了。加上Go語言的type assertion,可以提供一般動態語言才有的duck typing特性, 而仍然能在compile中捕捉明顯的錯誤。
5. OO
Go語言本質上不是物件導向語言,它還是過程化的。但是,在Go語言中, 你可以很輕易的做大部分你在別的OO語言中能做的事,用更簡單清晰的邏輯。是的,在這裡,不需要class,仍然可以繼承,仍然可以多態,但是速度卻快得多。因為本質上,OO在Go語言中,就是普通的struct操作。
6. Goroutine
這個幾乎算是Go語言的招牌特性之一了,我也不想多提。如果你完全不瞭解Goroutine,那麼你只需要知道,這玩意是超級輕量級的類似線程的東西,但通過它,你不需要複雜的線程操作鎖操作,不需要care調度,就能玩轉基本的並行程式。在Go語言裡,觸發一個routine和erlang spawn一樣簡單。基本上要掌握Go語言,以Goroutine和channel為核心的記憶體模型是必須要懂的。不過請放心,真的非常簡單。
7. 更多現代的特性
和C比較,Go語言完全就是一門現代化語言,原生支援的Unicode, garbage collection, Closures(是的,和functional programming language類似), function是first class object,等等等等。
輕易,簡單,快速之類的形容詞就是用來形容Go語言的特點。可以說,這一點都不誇張,連Go語言的入門學習到提高,都比別的語言門檻低太多太多。在大部分人都有C的背景的時代,對於Go語言,從入門到能夠上手做項目,最多不過半個月。Go語言給人的感覺就是太直接了,什麼都直接,讀原始碼直接,寫自己的代碼也直接。
go必然是優缺點的,而很多缺點就是因為整個語言太新,不成熟,隨著時間的推移都能得到解決,相比之下都能忍了。如果你希望進一步瞭解Go語言的優缺點,可以參考以下yufeng寫的這篇文章,系統程式設計語言明日之星—Go點此下載。
Go語言已經逐漸開始被人們接收,並且開始被使用於開發中。Go語言被Google用於Youtube的資料庫,被越來越多的國外公司(大部分創業公司)用於後端開發,甚至在天朝,也有完全用Go語言做服務開發的雲應用公司了。可以說,隨著Go 1即將到來的正式推出,Go語言的使用範圍,應該會越來越廣。
GO語言使用入門指南
一年前Google發布了DART,這是一個致力於協助開發人員打造複雜網頁應用的現代化語言、庫和工具。一年後的今天Google公布了DART的開源SDK,可在dartlang.org擷取,其中還包括DART編輯器和Dartium(原生支援DART的Chromium build)。另外DART本身還有很多改進:
- 更快的DART虛擬機器,甚至比Octane測試的V8還快
- 新的DART到JavaScript翻譯器
- 一個可工作在現代化瀏覽器裡的HTML庫
- 可與Javascript互動運作的程式碼程式庫
- 一個新的更易用的編輯器
- 新的封裝包管理器Pub
- 原生支援DART的Chromium build Dartium
- 伺服器端的I/O庫
- 目前Dart有兩種方式運行:一是在本地的虛擬機器上,二是將Dart代碼轉成Javascript,直接在Javascript引擎上運行。
- 更多詳細可以訪問dart的官方介紹