Go 部落格
Go:一年前的今天
2009 年 11 月 10 日,我們啟動了 Go 專案:一個專注於簡潔和效率的開源程式語言。在接下來的一年中,Go 專案本身及其社群都取得了巨大的發展。
我們著手構建一門用於系統程式設計的語言——那種通常用 C 或 C++ 編寫的程式——我們對 Go 作為通用語言的實用性感到驚訝。我們曾預期會引起 C、C++ 和 Java 程式設計師的興趣,但沒想到 Python 和 JavaScript 等動態型別語言的使用者也表現出如此濃厚的興趣。Go 的原生編譯、靜態型別、記憶體管理和輕量級語法的結合似乎引起了程式設計社群廣泛群體的共鳴。
這個群體發展成為一個由熱情的 Go 編碼者組成的專注社群。我們的 郵件列表 已有超過 3,800 名成員,每月大約有 1,500 篇帖子。該專案有超過 130 名貢獻者(提交了程式碼或文件的人),自發布以來,2,800 次提交中有近三分之一來自核心團隊之外的程式設計師。為了整理這些程式碼,在我們的 開發郵件列表 上交換了近 14,000 封電子郵件。
這些數字反映了專案程式碼庫中顯而易見的勞動成果。編譯器有了顯著改進,程式碼生成更快、更高效,修復了一百多個已報告的 bug,並支援更廣泛的作業系統和架構。Windows 移植工作在專注的貢獻者群體(其中一位成為了我們專案中第一位非谷歌的提交者)的努力下接近完成。ARM 移植也取得了巨大進展,最近達到了透過所有測試的里程碑。
Go 工具集已得到擴充套件和改進。Go 文件工具 godoc 現在支援文件化其他源樹(您可以瀏覽和搜尋自己的程式碼),並提供 “code walk” 介面用於呈現教程材料(還有許多其他改進)。新的包管理工具 Goinstall 允許使用者透過單個命令安裝和更新外部包。Gofmt,Go 的美化工具,現在在可能的情況下進行語法簡化。Goplay,一個基於網路的“邊寫邊編譯”工具,是在無法訪問 Go Playground 時方便地進行 Go 實驗的方式。
標準庫增加了超過 42,000 行程式碼,幷包含了 20 個新的 包。新增內容包括 jpeg、jsonrpc、mime、netchan 和 smtp 包,以及大量新的 加密 包。更廣泛地說,隨著我們對 Go 慣用法的理解加深,標準庫也在不斷完善和修訂。
除錯方面也有所改進。gc 編譯器對 DWARF 輸出的近期改進使得 GNU 偵錯程式 GDB 對 Go 二進位制檔案有用,我們正積極努力使除錯資訊更完整。(詳見近期博文。)
現在比以往任何時候都更容易連結用 Go 以外的語言編寫的現有庫。Go 支援已包含在最新的 SWIG 版本 2.0.1 中,使得連結 C 和 C++ 程式碼更加容易,而我們的 cgo 工具也得到了許多修復和改進。
Gccgo,GNU C 編譯器的 Go 前端,作為 Go 的並行實現,一直與 gc 編譯器保持同步。它現在具有可工作的垃圾回收器,並已被接納到 GCC 核心中。我們現在正努力將 gofrontend 作為 BSD 許可的 Go 編譯器前端提供,使其完全獨立於 GCC。
在 Go 專案之外,Go 也開始被用於構建實際軟體。在我們的 專案儀表板 上列出了 200 多個 Go 程式和庫,在 Google Code 和 GitHub 上還有數百個。在我們的郵件列表和 IRC 頻道上,您可以找到世界各地使用 Go 進行程式設計專案的編碼者。(有關實際示例,請參閱我們上月的訪客博文。)在 Google 內部,有幾個團隊選擇 Go 來構建生產軟體,我們也收到了其他公司正在使用 Go 開發大型系統的報告。我們還與一些使用 Go 作為教學語言的教育工作者保持聯絡。
語言本身也成長和成熟了。在過去的一年裡,我們收到了許多功能請求。但 Go 是一門小巧的語言,我們一直努力確保任何新功能都能在簡潔性和實用性之間取得恰當的平衡。自發布以來,我們進行了一些語言更改,其中許多是社群反饋驅動的。
- 在幾乎所有情況下,分號現在都是可選的。規範
- 新的內建函式
copy
和append
使 slice 的管理更高效和直接。規範 - 建立 sub-slice 時可以省略上下界。這意味著
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 Slice:用法和內部機制
上一篇文章:除錯 Go 程式碼(狀態報告)
部落格索引