Go 部落格
Go:一年前的今天
2009 年 11 月 10 日,我們釋出了 Go 專案:一門注重簡潔和高效的開源程式語言。過去的一年裡,Go 專案本身及其社群都取得了長足的發展。
我們最初的設想是構建一門用於系統程式設計的語言——類似於 C 或 C++ 編寫的程式。但令人驚喜的是,Go 在通用程式設計領域也展現出了它的實用性。我們原本預期 C、C++ 和 Java 程式設計師會對此感興趣,但出乎意料的是,Python 和 JavaScript 等動態型別語言的使用者也表現出了極大的熱情。Go 結合了原生編譯、靜態型別、記憶體管理和簡潔的語法,似乎與廣大程式設計社群產生了共鳴。
這種共鳴逐漸凝聚成了一個充滿活力的 Go 開發者社群。我們的郵件列表已有超過 3800 名成員,每月有大約 1500 封帖子。該專案已有超過 130 名貢獻者(提交過程式碼或文件的人),自發布以來近 2800 次提交中,有近三分之一是由核心團隊之外的程式設計師貢獻的。為了整理所有這些程式碼,我們的開發郵件列表共交換了近 14000 封郵件。
這些數字反映了專案程式碼庫中顯而易見的勞動成果。編譯器得到了顯著改進,程式碼生成更快、更有效率,修復了一百多個已報告的 bug,並支援了更廣泛的作業系統和架構。由於一群熱心的貢獻者(其中一位是我們專案的第一位非 Google 提交者)的努力,Windows 移植工作已接近完成。ARM 移植也取得了巨大進展,最近達到了透過所有測試的里程碑。
Go 工具集得到了擴充套件和改進。Go 文件工具godoc現在支援其他原始碼樹的文件(您可以瀏覽和搜尋自己的程式碼),並提供了一個“程式碼漫步”介面來展示教程材料(此外還有更多改進)。Goinstall是一款新的包管理工具,允許使用者透過一個命令安裝和更新外部包。Gofmt,Go 的程式碼格式化工具,現在可以在可能的情況下進行語法簡化。Goplay 是一款基於 Web 的“邊寫邊編譯”工具,當您無法訪問Go Playground時,它是嘗試 Go 的便捷方式。
標準庫的程式碼量增加了 42,000 多行,並新增了 20 個包。新增的包包括jpeg、jsonrpc、mime、netchan和smtp包,以及一系列新的加密包。總的來說,隨著我們對 Go 慣用法的理解不斷加深,標準庫也在不斷地被最佳化和修改。
除錯體驗也有所改善。gc 編譯器 DWARF 輸出的最新改進使得 GDB(GNU 偵錯程式)能夠用於 Go 二進位制檔案,我們也在積極努力讓除錯資訊更完善。(詳情請參閱最近的部落格文章。)
現在,與 Go 以外的現有庫進行連結比以往任何時候都更容易。最新發布的 SWIG2.0.1版本支援 Go,使得與 C 和 C++ 程式碼連結更加便捷,而我們的cgo工具也得到了許多修復和改進。
Gccgo,作為 GCC(GNU C 編譯器)的 Go 前端,作為並行 Go 實現,已經跟上了 gc 編譯器的步伐。它現在擁有一個工作的垃圾回收器,並已被接受為 GCC 的核心部分。我們現在正致力於將gofrontend作為一種與 GCC 完全解耦的 BSD 許可的 Go 編譯器前端提供。
在 Go 專案本身之外,Go 也開始被用於構建實際的軟體。我們的專案儀表板列出了 200 多個 Go 程式和庫,在Google Code和GitHub上還有數百個。在我們的郵件列表和 IRC 頻道上,您可以找到來自世界各地使用 Go 進行程式設計專案的程式設計師。(上個月的客座部落格文章中有一個真實世界的例子。)在 Google 內部,有幾個團隊選擇 Go 來構建生產軟體,我們也收到其他公司正在用 Go 開發大型系統的報告。我們還與幾位將 Go 用作教學語言的教育工作者進行了交流。
語言本身也在不斷發展和成熟。在過去的一年裡,我們收到了許多功能請求。但 Go 是一門小型語言,我們一直在努力確保任何新功能都能在簡潔性和實用性之間取得最佳平衡。自發布以來,我們做出了一些語言方面的更改,其中許多是根據社群的反饋驅動的。
- 幾乎所有情況下,分號現在都是可選的。規範
- 新的內建函式
copy
和append
使切片管理更高效、更直接。規範 - 建立子切片時,可以省略上界和下界。這意味著
s[:]
是s[0:len(s)]
的簡寫。規範 - 新的內建函式
recover
作為錯誤處理機制,是對panic
和defer
的補充。部落格,規範 - 新的複數型別(
complex
、complex64
和complex128
)簡化了某些數學運算。規範,規範 - 複合字面量語法允許省略冗餘的型別資訊(例如,在指定二維陣列時)。release.2010-10-27,規範
- 現在規定了可變引數函式(
...T
)及其傳播(v...
)的通用語法。規範,規範,release.2010-09-29
Go 肯定已經做好了生產使用的準備,但仍有改進空間。我們近期關注的重點是提高 Go 程式在高效能系統環境下的速度和效率。這意味著改進垃圾回收器、最佳化生成的程式碼以及改進核心庫。我們還在探索對型別系統進行一些進一步的擴充套件,以簡化泛型程式設計。一年內發生了很多事情,既令人興奮又令人滿意。我們希望即將到來的一年比過去一年更加碩果累累。
如果您一直想重新開始學習 Go,現在正是絕佳的時機!請檢視 文件和 入門頁面以獲取更多資訊,或者直接在 Go Playground中盡情探索。
下一篇文章:Go 切片:用法和內部機制
上一篇文章:除錯 Go 程式碼(狀態報告)
部落格索引