Let's Go

薄荷糖發表於2012-04-09

對於程式設計師來說,程式設計已經變得太難,因為他們希望輕鬆編寫出能夠高效編譯、快速執行的程式。時下沒有哪種語言能夠同時滿足這三個方面。與安全性和效率相比,更加註重輕鬆程式設計的程式設計師,選擇了動態型別的語言,如Python和JavaScript,而不是C++,或者相對舒緩些的Java。

Go語言的設計者在介紹Go專案的目標時指出:“已經十幾年沒有新的系統語言出現了,但此時計算環境發生了巨大變化,出現如下趨勢:

(1) 計算機的執行速度變得極快,而軟體開發速度基本沒變;

(2) 依存管理是今天軟體開發的一大部分,但傳統C語言的標頭檔案卻缺少乾淨的依存分析和快速編譯的特性;

(3) 越來越多的人摒棄了Java和C++等語言笨重的型別系統,轉而選擇使用Python和JavaScript等動態型別系統的語言;

(4) 一些基本概念,例如垃圾回收和平行計算,並未在主流語言中得到充分支援;

(5) 多核計算機的興起導致了擔憂和困擾。”

下面來介紹一下Go語言的與眾不同之處。

(1) Go的介面(interface)型別把需要的功能聚合在一起。沒有繼承層次,只有組合功能。

(2) 強型別系統使犯錯誤的機會大大降低。正確通過編譯,幾乎就沒有什麼 bug 了。

(3) 內建的 string / slice 型別,以及 gc 。這是現代程式設計必須的東西。手動管理未必有更高的效率,但一定有更多的出錯機會。

(4) defer語句是Go語言的一個特色,它註冊的函式,在它所在函式返回時會自動執行。所以,不管Compile函式如何返回,os.Remove都會執行,刪除Create建立的檔案。f.Close()也會執行,關閉並釋放Create佔用的資源。

(5) 零值初始化。很多程式設計師都覺得 C++ 的建構函式特別多餘。按照他們使用 C 的慣例,一切資料結構都應該用 0 初始化。所以 C 裡有 calloc 這個函式。Go 把這點貫徹了。不會再有未定義的資料。

(6) 包系統特別的好。而且嚴格定義了包的初始化過程,即 init 函式。有語言層面的支援就是好。也就是隻有 init 沒有 exit 。

(7) Go的招牌是併發機制。Go的函式可以用go語句併發執行,稱為去程(goroutine)。併發去程的同步與資料傳遞靠的是程道(channel)型別的變數。select語句可以從多個程道中隨機挑選⼀一個不再阻塞的去程執行。

(8) { 要不要獨立佔一行的信仰之爭終於結束了。在 Go 裡,如果你把 { 從 if/for 語言的行末去掉,放在下一行。編譯器是不會讓你通過的。(除非你再加一個 ; )。

鑑於上述優點,我們還有什麼理由不學習Go語言呢!下面就讓本書帶你走進Go語言的世界吧。

相關文章