2.7 Go 運行時(runtime)
盡管 Go 編譯器產生的是本地可執行代碼,這些代碼仍舊運行在 Go 的 runtime(這部分的代碼可以在 runtime 包中找到)當中。這個 runtime 類似 Java 和 .NET 語言所用到的虛擬機,它負責管理包括內存分配、垃圾回收(第 10.8 節)、棧處理、goroutine、channel、切片(slice)、map 和反射(reflection)等等。
runtime 主要由 C 語言編寫(Go 1.5 開始自舉),並且是每個 Go 包的最頂級包。你可以在目錄 $GOROOT/src/runtime
中找到相關內容。
垃圾回收器 Go 擁有簡單卻高效的標記-清除回收器。它的主要思想來源於 IBM 的可復用垃圾回收器,旨在打造一個高效、低延遲的並發回收器。目前 gccgo 還沒有回收器,同時適用 gc 和 gccgo 的新回收器正在研發中。使用一門具有垃圾回收功能的編程語言不代表你可以避免內存分配所帶來的問題,分配和回收內容都是消耗 CPU 資源的一種行為。
Go 的可執行文件都比相對應的源代碼文件要大很多,這恰恰說明了 Go 的 runtime 嵌入到了每一個可執行文件當中。當然,在部署到數量巨大的集群時,較大的文件體積也是比較頭疼的問題。但總得來說,Go 的部署工作還是要比 Java 和 Python 輕松得多。因為 Go 不需要依賴任何其它文件,它只需要一個單獨的靜態文件,這樣你也不會像使用其它語言一樣在各種不同版本的依賴文件之間混淆。
摘自:https://github.com/Unknwon/the-way-to-go_ZH_CN/blob/master/eBook/02.7.md
如果后續用eclipse或者intelliJ Idea則看下
編輯器和集成開發環境
這些編輯器包含了代碼高亮和其它與 Go 有關的一些使用工具:Emacs、Vim、Xcode 6、KD Kate、TextWrangler、BBEdit、McEdit、TextMate、TextPad、JEdit、SciTE、Nano、Notepad++、Geany、SlickEdit、IntelliJ IDEA 和 Sublime Text 2。
你可以將 Linux 的文本編輯器 GEdit 改造成一個很好的 Go 開發工具,詳見頁面:http://gohelp.wordpress.com/。
Sublime Text 是一個革命性的跨平台(Linux、Mac OS X、Windows)文本編輯器,它支持編寫非常多的編程語言代碼。對於 Go 而言,它有一個插件叫做 GoSublime 來支持代碼補全和代碼模版。
這里還有一些更加高級的 Go 開發工具,其中一些是以插件的形式利用本身是作為開發 Java 的工具。
IntelliJ Idea Plugin 是一個 IntelliJ IDEA 的插件,具有很好的操作體驗和代碼補全功能。
LiteIDE 這是一款專門針對 Go 開發的集成開發環境,在編輯、編譯和運行 Go 程序和項目方面都有非常好的支持。同時還包括了對源代碼的抽象語法樹視圖和一些內置工具(此開發環境由國人 vfc 大叔開發)。
GoClipse 是一款 Eclipse IDE 的插件,擁有非常多的特性以及通過 GoCode 來實現代碼補全功能。
如果你對集成開發環境都不是很熟悉,那就使用 LiteIDE 吧,另外使用 GoClipse 或者 IntelliJ Idea Plugin 也是不錯的選擇。
代碼補全 一般都是通過內置 GoCode 實現的(如:LieteIDE、GoClipse),如果需要手動安裝 GoCode,在命令行輸入指令 go get -u github.com/nsf/gocode
即可(務必事先配置好 Go 環境變量) 。
接下來會對這三個集成開發環境做更加詳細的說明。