標籤:style blog http java color 檔案
Go簡介
為什麼有了系統編程層級的C/C++以及後來的Java,也有指令碼層級的Ruby/Perl/Python語言可用,Google為什麼還要發布Go語言?
“我們開發Go,是因為近10年左右開發程式之難讓我們有點沮喪”
--首席軟體工程師Rob Pike
Go完全支援coroutine,即協程,也稱為輕量級的線程。多數語言在文法層面不直接支援協程。一些語言或許可以通過第三方庫來支援協程,但是功能並不完整。比如僅僅提供協程的建立,
銷毀和切換能力。如果在這樣的協程中調用一個同步IO,如網路通訊/本地檔案讀寫,都會阻塞其他並發的協程。從而無法真正的完成協程本身期望的目標。
Go在語言層面就支援協程,叫goroutine。Go語言提供的所有系統調用syscall,包括所有同步IO,都會讓出CPU給其他goroutine。
運行方式是
func run (args string) { //...}func main() { go run(“go”)}
只需要一個go關鍵字,就可以實現並發的協程運算,是不是很酷。
Go強調風格的強制統一。public的變數必須大寫字母開始,private則以小寫字母開始,這樣就不用顯示寫出public和private修飾符了。
同時Go對代碼塊的起始“{”則有強制性要求。如
if expression { // 要求如此}if expression{ //編譯錯誤}
這裡可以明顯看出強制性,在C++/JAVA中,兩種風格都允許,明顯會帶來一些風格的不統一。
Go首創的錯誤處理也很酷,如下看關鍵字defer的用法
f,err = os.open(filename)if err != nil { log.Println("open failed") return}defer f.Close()
這裡的defer保證在函數退出時候,不管什麼原因引起的異常,都會使得f的資源得到釋放。
同時Go還支援多個傳回值,雖然動態語言Python也支援。
一個defer就徹底讓你放棄java中那些嵌套的try…catch…finally。
Go中不支援運算子和操作符的重載,C++/JAVA中提供的重載雖然解決了OOP部分問題,但是帶來複雜性。
Go中放棄了建構函式和解構函式,沒有虛函數,也沒有了vptr,因此原來OOP中對象的開銷都降到最小。GO在Google看來,是實戰派作風,而不是學院派。
Go接受函數式編程思想,支援goroutine和通道,支援匿名函數和閉包,可以說,在系統級語言方面,Go是最有開放性的一門語言。
Go編程環境搭建
這裡首先直接下載安裝包:
http://gopher.qiniudn.com/download/go/go1.3.windows-amd64.zip
解壓出其中的go頂級目錄,拷貝到C下:C:\go。
配置環境變數到path後,就可以在命令列中看到go版本資訊了。
。
Go的編輯器選擇有很多種,這裡選擇sublime。鍵入Hello,world,運行程式,結束Go學習的入門第一課。
參考書《Go語言編程》:http://www.amazon.cn/s/ref=nb_sb_ss_i_0_6?__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99&url=search-alias%3Daps&field-keywords=go%E8%AF%AD%E8%A8%80%E7%BC%96%E7%A8%8B&sprefix=Go%E8%AF%AD%E8%A8%80%E7%BC%96%E7%A8%8B%2Caps%2C173&rh=i%3Aaps%2Ck%3Ago%E8%AF%AD%E8%A8%80%E7%BC%96%E7%A8%8B