Go語言基礎學習一:對go的感性初步認識

1.why Go?

     接觸一門語言,首先我們要對這門語言有着感性的認識,在沒有了解該語言的語法細節下,我們要首先能對它的獨特魅力有初步掌握,只有這樣我們才能沿着正確的思維嚮導去感受這門語言的韻味~

    爲什麼學習go語言,或者說go語言相對於其它的語言如C,Phython等有什麼樣的優勢,什麼場景下運用go語言可以最大程度發揮它的優勢?目前我大致在網絡上總結了如下幾點特徵:

   (1)部署簡單,go語言是生成的靜態可執行文件,除了glibc之外沒有其他的外部依賴項,這對於部署人員來說無疑是非常方便的事情,他不用去維護各種包,庫的依賴關係,與phython在這一點的比較上具有巨大的優勢。

   (2)具有良好的併發性,go語言的goroutine和channel使得編寫高併發的軟件變得相當容易,單個go應用可以有效的利用多個核,很多情況下完全不需要考慮鎖機制和由此引發的問題

   (3)哲學藝術性的語言設計(這個實在很難體會,慢慢感受吧),從學術的角度講 Go 語言其實非常平庸,不支持許多高級的語言特性;但從工程的角度講,Go 的設計是非常優秀的:規範足夠簡單靈活,有其他語言基礎的程序員都能迅速上手。更重要的是 Go 自帶完善的工具鏈,大大提高了團隊協作的一致性。比如 gofmt 自動排版 Go 代碼,很大程度上杜絕了不同人寫的代碼排版風格不一致的問題。把編輯器配置成在編輯存檔的時候自動運行 gofmt,這樣在編寫代碼的時候可以隨意擺放位置,存檔的時候自動變成正確排版的代碼。此外還有 gofix, govet 等非常有用的工具。

   (4)良好的執行性能,執行性能雖然比不上C和java,但是比phython還是要性能好上很多。
   (5)豐富的標準庫,go語言本身就內置了很多庫,也有非常強大的網絡庫
   (6)跨平臺編譯,並內嵌對C語言的支持
2.when Go?
  • 服務器編程,以前你如果使用C或者C++做的那些事情,用Go來做很合適,例如處理日誌、數據打包、虛擬機處理、文件系統等。
  • 分佈式系統,數據庫代理器等
  • 網絡編程,這一塊目前應用最廣,包括Web應用、API應用、下載應用、
  • 內存數據庫,前一段時間google開發的groupcache,couchbase的部分組建
  • 雲平臺,目前國外很多雲平臺在採用Go開發,CloudFoundy的部分組建,前VMare的技術總監自己出來搞的apcera雲平臺
3.lacks of Go
  • Go的import包不支持版本,有時候升級容易導致項目不可運行,所以需要自己控制相應的版本信息
  • Go的goroutine一旦啓動之後,不同的goroutine之間切換不是受程序控制,runtime調度的時候,需要嚴謹的邏輯,不然goroutine休眠,過一段時間邏輯結束了,突然冒出來又執行了,會導致邏輯出錯等情況。
  • GC延遲有點大,我開發的日誌系統傷過一次,同時併發很大的情況下,處理很大的日誌,GC沒有那麼快,內存回收不給力,後來經過profile程序改進之後得到了改善。
  • pkg下面的圖片處理庫很多bug,還是使用成熟產品好,調用這些成熟庫imagemagick的接口比較靠譜

部分參考知乎~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章