Mark Summerfield:programming In Go——creating Applications For The 21st Century@2012 (第1版)
這份資料,特別是其引言部分,主要圍繞著 Go 程式語言的核心特性及其為何適合現代軟體開發的論點展開,並闡述了這本教授 Go 語言的書籍旨在如何幫助讀者掌握這些概念。其主要論點可以歸納如下:
-
Go 語言是為迎向 21 世紀計算環境而設計的高效能語言:
- 資料開篇即強調 Go 是一種「為 21 世紀應用而生」的程式語言,其設計考量了現代電腦的特性,特別是多處理器和多核心架構。
- Go 的一個突出優勢是其極快的編譯速度。這歸功於其精心設計的相依性管理機制和簡潔的語法(例如沒有預處理器和 Include 檔案)。快速編譯使得 Go 程式適合在需要頻繁構建的大型專案中使用,甚至能用於過去習慣使用腳本語言的場合。
- 作為一門編譯語言,Go 生成原生程式碼,執行效率高。
- 語言本身簡潔高效,避免了如 C++ 或 Java 等老語言的複雜性和冗長。
-
Go 提供強大的並發支援,徹底簡化並發程式設計:
- 這是 Go 最引人注目的特性之一,其並發模型基於 CSP(通訊順序進程),強調「不要通過共享記憶體來通訊,而是通過通訊來共享記憶體」。
- Go 提供 goroutines,這是一種非常輕量級的執行緒或協程。相比傳統執行緒,可以輕易創建大量 goroutines,且它們會自動在可用核心上負載平衡。
- Go 提供 channel 作為 goroutines 之間安全通訊和同步的手段。
- 這種基於通訊的並發模型大大降低了傳統執行緒加鎖模型帶來的複雜性(如死鎖、資料競爭),使得編寫正確的並發程式變得更加容易和自然。資料指出,即使是將單執行緒程式移植到 Go,也常能發現利用並發優化效能的機會。
-
Go 具備強靜態型別特性,但同時保有靈活性:
- Go 是一門強靜態類型語言,這對於構建大型應用程式至關重要,有助於在編譯時期發現錯誤。
- 然而,Go 的型別系統並不顯得繁瑣。透過短變數宣告語法 (:=),編譯器可以根據賦值自動推斷型別,減少了冗餘的型別宣告。
- Go 還支援一種強大且便利的「鴨子類型」(duck typing,透過介面實現),使得程式設計師可以根據值所提供的 方法 來處理它,而無需關心其具體型別,增加了程式的彈性和通用性。
-
Go 語言設計務實,提供多種程式設計範式,並優化常用數據結構:
- Go 不強制使用單一範式。程式設計師可以根據問題需求選擇過程式、物件導向或並發程式設計的組合。
- Go 的物件導向與傳統語言截然不同。它沒有類和繼承,而是使用結構體 (structs) 進行聚合和嵌入(類似委派),並透過介面和「鴨子類型」實現多態。資料認為這種方法更靈活且易於使用。
- Go 內建了高效的集合類型:切片 (slices) 和映射 (maps)。它們提供了類似於 Python 列表和字典的功能,並且經過高度優化,能滿足絕大多數需求。雖然 Go 有指針,但這些內建集合類型的使用方式更接近引用,簡化了操作。
- 雖然 Go 缺乏泛型,但其介面和內建集合類型在許多場景下可以替代泛型需求。
-
書籍旨在系統性地教授 Go 語言及其慣用風格:
- 這本書的目的是作為一本高品質的參考和教程,指導讀者使用 Go 語言及其標準庫來創建應用程式。
- 書籍假設讀者具有其他主流程式語言的經驗,但會詳細解釋 Go 獨特的特性和慣用法。
- 內容結構從概述、基本資料類型(布林、數字、字串、集合)逐步深入到過程式程式設計、物件導向、並發、檔案處理和套件使用。
- 書籍採用實用、動手的教學方法,提供大量完整、可執行的範例程式碼和練習,鼓勵讀者親自嘗試,以掌握 Go 的精髓。特別是針對 Go 獨特的物件導向和並發概念,書籍提供了豐富的範例以確保讀者能透徹理解。
總結來說,這份資料的核心論點是 Go 是一門為現代並發計算環境量身打造的高效、簡潔、靈活且具備強大內建功能(尤其是並發支援和資料結構)的程式語言,它提供了一種不同於傳統、更為務實且易於使用的程式設計方法,而這本書則旨在引導有經驗的程式設計師以正確、慣用的 Go 方式來掌握這些特性。
comments
comments for this post are closed