1. 程式人生 > >go優點與缺點

go優點與缺點

Go語言

Go語言(或稱Golang)是雲端計算時代的C語言。Go語言的誕生是為了讓程式設計師有更高的生產效率,Go語言專門針對多處理器系統應用程式的程式設計進行了優化,使用Go編譯的程式可以媲美C或C++程式碼的速度,而且更加安全、支援並行程序。

開發人員在為專案選擇語言時,不得不在快速開發和效能之間做出選擇。C和C++這類語言提供了很快的執行速度,而 Ruby 和 Python 這類語言則擅長快速開發。Go語言在這兩者間架起了橋樑,不僅提供了高效能的語言,同時也讓開發更快速。

Go語言優勢

可直接編譯成機器碼,不依賴其他庫,glibc的版本有一定要求,部署就是扔一個檔案上去就完成了。
靜態型別語言,但是有動態語言的感覺,靜態型別的語言就是可以在編譯的時候檢查出來隱藏的大多數問題,動態語言的感覺就是有很多的包可以使用,寫起來的效率很高。
語言層面支援併發,這個就是Go最大的特色,天生的支援併發。Go就是基因裡面支援的併發,可以充分的利用多核,很容易的使用併發。


內建runtime,支援垃圾回收,這屬於動態語言的特性之一吧,雖然目前來說GC(記憶體垃圾回收機制)不算完美,但是足以應付我們所能遇到的大多數情況,特別是Go1.1之後的GC。
簡單易學,Go語言的作者都有C的基因,那麼Go自然而然就有了C的基因,那麼Go關鍵字是25個,但是表達能力很強大,幾乎支援大多數你在其他語言見過的特性:繼承、過載、物件等。
豐富的標準庫,Go目前已經內建了大量的庫,特別是網路庫非常強大。
內建強大的工具,Go語言裡面內建了很多工具鏈,最好的應該是gofmt工具,自動化格式化程式碼,能夠讓團隊review變得如此的簡單,程式碼格式一模一樣,想不一樣都很困難。
跨平臺編譯,如果你寫的Go程式碼不包含cgo,那麼就可以做到window系統編譯linux的應用,如何做到的呢?Go引用了plan9的程式碼,這就是不依賴系統的資訊。
內嵌C支援,Go裡面也可以直接包含C程式碼,利用現有的豐富的C庫。

Go適合用來做什麼

伺服器程式設計,以前你如果使用C或者C++做的那些事情,用Go來做很合適,例如處理日誌、資料打包、虛擬機器處理、檔案系統等。
分散式系統,資料庫代理器等。
網路程式設計,這一塊目前應用最廣,包括Web應用、API應用、下載應用。
記憶體資料庫,如google開發的groupcache,couchbase的部分組建。
雲平臺,目前國外很多雲平臺在採用Go開發,CloudFoundy的部分組建,前VMare的技術總監自己出來搞的apcera雲平臺。

使用 Go 語言的缺點

缺點 1:缺少框架

Go 語言沒有一個主要的框架,如 Ruby 的 Rails 框架、Python 的 Django 框架或 PHP 的 Laravel。這是 Go 語言社群激烈討論的問題,因為許多人認為我們不應該從使用框架開始。在很多案例情況中確實如此,但如果只是希望構建一個簡單的 CRUD API,那麼使用 Django/DJRF、Rails Laravel 或 Phoenix 將簡單地多。

缺點 2:錯誤處理

Go 語言通過函式和預期的呼叫程式碼簡單地返回錯誤(或返回呼叫堆疊)而幫助開發者處理編譯報錯。雖然這種方法是有效的,但很容易丟失錯誤發生的範圍,因此我們也很難向用戶提供有意義的錯誤資訊。錯誤包(errors package)可以允許我們新增返回錯誤的上下文和堆疊追蹤而解決該問題。
另一個問題是我們可能會忘記處理報錯。諸如 errcheck 和 megacheck 等靜態分析工具可以避免出現這些失誤。雖然這些解決方案十分有效,但可能並不是那麼正確的方法。

缺點 3:軟體包管理

Go 語言的軟體包管理絕對不是完美的。預設情況下,它沒有辦法制定特定版本的依賴庫,也無法建立可複寫的 builds。相比之下 Python、Node 和 Ruby 都有更好的軟體包管理系統。然而通過正確的工具,Go 語言的軟體包管理也可以表現得不錯。
我們可以使用 Dep 來管理依賴項,它也能指定特定的軟體包版本。除此之外,我們還可以使用一個名為 VirtualGo 的開源工具,它能輕鬆地管理 Go 語言編寫的多個專案。