為什麼要使用 Go 語言,Go 語言的優勢在哪裡?

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。轉自:http://www.zhihu.com/question/21409296
1、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支援,前面說了作者是C的作者,所以Go裡面也可以直接包含c代碼,利用現有的豐富的C庫。
2、Go適合用來做什麼
  • 伺服器編程,以前你如果使用C或者C++做的那些事情,用Go來做很合適,例如處理日誌、資料打包、虛擬機器處理、檔案系統等。
  • 分布式系統,資料庫代理器等
  • 網路編程,這一塊目前應用最廣,包括Web應用、API應用、下載應用、
  • 記憶體資料庫,前一段時間google開發的groupcache,couchbase的部分組建
  • 雲平台,目前國外很多雲平台在採用Go開發,CloudFoundy的部分組建,前VMare的技術總監自己出來搞的apcera雲平台。
3、Go成功的項目
nsq:bitly開源的訊息佇列系統,效能非常高,目前他們每天處理數十億條的訊息
docker:基於lxc的一個虛擬打包工具,能夠實現PAAS平台的組建。
packer:用來產生不同平台的鏡像檔案,例如VM、vbox、AWS等,作者是vagrant的作者
skynet:分布式調度架構
Doozer:分布式同步工具,類似ZooKeeper
Heka:mazila開源的Tlog系統
cbfs:couchbase開源的Distributed File System
tsuru:開源的PAAS平台,和SAE實現的功能一模一樣
groupcache:memcahe作者寫的用於Google下載系統的緩衝系統
god:類似redis的緩衝系統,但是支援分布式和擴充性
gor:網路流量抓包和重放工具
以下是一些公司,只是一小部分:
  • http://Apcera.com
  • http://Stathat.com
  • Juju at Canonical/Ubuntu, presentation
  • http://Beachfront.iO at Beachfront Media
  • CloudFlare
  • Soundcloud
  • Mozilla
  • Disqus
  • http://Bit.ly
  • Heroku
  • google
  • youtube
下面列出來了一些使用的使用者
GoUsers - go-wiki - A list of organizations that use Go.
4、Go還存在的缺點
以下缺點是我自己在項目開發中遇到的一些問題:
  • Go的import包不支援版本,有時候升級容易導致項目不可運行,所以需要自己控制相應的版本資訊
  • Go的goroutine一旦啟動之後,不同的goroutine之間切換不是受程式控制,runtime調度的時候,需要嚴謹的邏輯,不然goroutine休眠,過一段時間邏輯結束了,突然冒出來又執行了,會導致邏輯出錯等情況。
  • GC延遲有點大,我開發的日誌系統傷過一次,同時並發很大的情況下,處理很大的日誌,GC沒有那麼快,記憶體回收不給力,後來經過profile程式改進之後得到了改善。
  • pkg下面的圖片處理庫很多bug,還是使用成熟產品好,調用這些成熟庫imagemagick的介面比較靠譜


最後還是建議大家學習Go,這門語言真的值得大家好好學習,因為它可以做從底層到前端的任何工作。

學習Go的話歡迎大家通過我寫的書來學習,我已經開源在github:
astaxie/build-web-application-with-golang · GitHub

還有如果你用來做API開發或者網路開發,那麼我做的開源架構beego也許適合你,可以適當的來學習一下:
astaxie/beego · GitHub

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.