讀古今文學網 > Go語言程序設計 > 附錄A 後記 >

附錄A 後記

Go語言的作者們對一些主流的編程語言進行了深刻的反思,試圖識別哪些語言特性是有價值的和有助於提高生產率的,以及哪些特性是多餘的甚至是降低生產率的。再基於他們加起來已經有好幾十年的編程經驗進行總結分析,最終產生了全新的Go編程語言。

與傳統的Objective-C和C++相比,Go語言是面向對象的「更好的C」。像Java一樣,Go語言有自己的語法,所以它不必像Objective-C和C++那樣來兼容C語法。但是和Java不同的是,Go語言是靜態編譯的,因此也不會受限於虛擬機的速度。

Go語言除了以抽像接口類型和優雅的支持聚合和嵌入的結構類型支持面向對象的全新方式外,也支持函數字面量和閉包等高級特性。同時 Go語言內置的映射和切片能夠滿足絕大多數數據結構的需要。Go語言的Unicode字符串類型使用行業的事實編碼標準UTF-8,而且標準庫完美支持字節流和字符。

Go語言的並發支持是非常優秀的,它使用輕量級的goroutine和類型安全通道(和鎖等不同的是,通道不是底層的數據結構)。與其他的編程語言(如 C、C++、Java 等)相比,在 Go語言裡創建並發程序要容易得多。而且 Go語言閃電般的編譯速度特別適合那些構建大型 C++項目或者庫的開發人員。

目前Go語言已經被商業或非商業組織廣泛使用,Google內部也使用Go語言,,Google App Engine(code.google.com/appengine/docs/go/ overview.html)上已可以使用Go語言開發Web應用,之前只支持Java和Python。

這門語言目前仍然在快速進化,不過因為有go fix這樣的工具,我們可以很容易地將現有的代碼升級到最新版本的Go語言。而且,Go語言開發者打算讓所有Go語言的1.x版本向後兼容1.0版本,以使Go用戶能夠擁有一門又穩定又在持續進步的開發語言。

Go語言的標準庫非常廣泛,但即使它也不滿足我們的需求時,我們還可以看看 Go Dashboard(godashboard.appspot.com/project)能否找到我們需要的,或者我們可以使用其他語言編寫的第三方庫。要瞭解Go語言的最新消息可參考golang.org,這個網站有最新的文檔、語言規範(很容易看懂)、Go Dashboard、博客、視頻和一些其他支持文檔。

大部分學習Go語言的程序員都有一些其他編程語言的背景,例如C++、Java、Python等,因此在學習Go語言時通常都已經形成了基於繼承模型的面向對像思維。Go語言刻意地不支持繼承,所以通常在C++或者Java之間進行代碼轉換時相對容易,但如果要轉換為Go語言,我們最好回到最開始去理解這段代碼的目的是完成什麼,而不是當前是怎麼做的,然後再用 Go語言完全重寫。也許最重要的不同之處在於支持繼承的語言允許將代碼和數據混合在一起,而Go語言強制它們分離。分離的好處就是提供了極大的靈活性,更適合於創建並發程序,這對於那些從支持繼承的語言過來的程序員,可能要花費一些時間和實踐來適應。Go語言的一位核心開發者Russ Cox說:

「很不幸的是,每次有人問我關於繼承的問題的時候,我總是回答『可以啊,使用嵌入就行』。其實嵌入很有用,也是繼承的一種方式,但是很多人都沒想到這一點。我的看法是:你還在用C++、Python、Java、Eiffel或其他的語言思考方式,停下來,用Go語言的方式思考。」

Go語言是一種學習和使用起來都很令人著迷的編程語言,編寫Go語言的代碼是一種享受。Go語言開發者會發現加入Go郵件列表對他們很有幫助,因為這個列表擁有很多優秀的發言者,是最適合討論和咨詢問題的地方(groups.google.com/group/ golang-nuts)。由於Go語言以開源項目的方式運作,你也可以選擇成為 Go語言開發者,幫助維護、改進和擴展 Go語言本身(golang.org/doc/contribute.html)。