簡介:Go語言是Google2009發布的第二款開源程式設計語言。Go語言專門針對多處理器系統應用程式的編程進行了最佳化,使用Go編譯的程式可以媲美C或C++代碼的速度,而且更加安全、支援並行進程。
為什麼使用Go語言,它的優勢在哪?
一、Go有什麼優勢:
1.可直接編譯成機器碼,不依賴其他庫,glibc的版本有一定要求,部署就是扔一個檔案上去就完成了。
2.靜態類型語言,但是有動態語言的感覺,靜態類型的語言就是可以在編譯的時候檢查出來隱藏的大多數問題,動態語言的感覺就是有很多的包可以使用,寫起來的效率很高。
3.語言層面支援並發,這個就是Go最大的特色,天生的支援並發,我曾經說過一句話,天生的基因和整容是有區別的,大家一樣美麗,但是你喜歡整容的還是天生基因的美麗呢?Go就是基因裡面支援的並發,可以充分的利用多核,很容易的使用並發。
4.內建runtime,支援記憶體回收,這屬於動態語言的特性之一吧,雖然目前來說GC不算完美,但是足以應付我們所能遇到的大多數情況,特別是Go1.1之後的GC。
5.簡單易學,Go語言的作者都有C的基因,那麼Go自然而然就有了C的基因,那麼Go關鍵字是25個,但是表達能力很強大,幾乎支援大多數你在其他語言見過的特性:繼承、重載、對象等。
6.豐富的標準庫,Go目前已經內建了大量的庫,特別是網路程式庫非常強大,我最愛的也是這部分。
內建強大的工具,Go語言裡面內建了很多工具鏈,最好的應該是7.gofmt工具,自動化格式化代碼,能夠讓團隊review變得如此的簡單,代碼格式一模一樣,想不一樣都很困難。
8.跨平台編譯,如果你寫的Go代碼不包含cgo,那麼就可以做到window系統編譯linux的應用,如何做到的呢?Go引用了plan9的代碼,這就是不依賴系統的資訊。
9.內嵌C支援,前面說了作者是C的作者,所以Go裡面也可以直接包含c代碼,利用現有的豐富的C庫。
二、Go適合用來做什麼:
1.伺服器編程,以前你如果使用C或者C++做的那些事情,用Go來做很合適,例如處理日誌、資料打包、虛擬機器處理、檔案系統等。
2.分布式系統,資料庫代理器等
3.網路編程,這一塊目前應用最廣,包括Web應用、API應用、下載應用等
4.記憶體資料庫,前一段時間google開發的groupcache,couchbase的部分組建
5.雲平台,目前國外很多雲平台在採用Go開發,CloudFoundy的部分組建,前VMare的技術總監自己出來搞的apcera雲平台。
一、Go還存在的缺點
1.Go的import包不支援版本,有時候升級容易導致項目不可運行,所以需要自己控制相應的版本資訊
2.Go的goroutine一旦啟動之後,不同的goroutine之間切換不是受程式控制,runtime調度的時候,需要嚴謹的邏輯,不然goroutine休眠,過一段時間邏輯結束了,突然冒出來又執行了,會導致邏輯出錯等情況。
3.GC延遲有點大,同時並發很大的情況下,處理很大的日誌,GC沒有那麼快,記憶體回收不給力,後來經過profile程式改進之後得到了改善。
所以看上去Go語言是存在兩大核心優勢:
1.簡單易學運行速度快,使用簡易程度堪比python而效能堪比C
2.並發能力超強,內建Goroutine協程調度機制
總結:Go語言是為瞭解決分散式運算,是雲端運算領域的新興語言。而區塊鏈是典型的分布式資料存放區系統,在此基礎上使用並發能力強的Go語言是絕配。且隨著區塊鏈行業的發展,Go語言的發展前景向好,是一個值得花精力去學習的優秀語言。