爲什麼開始學習GO言語

目錄

一、我爲什麼要學習GO語言?

1、接觸了Go語言編寫的程序

2、工作中遇到高併發的問題

二、Go語言有什麼競爭優勢?

1、Go語言開發速度更快、更容易,同時可以獲得媲美C語言的高性能;

2、快速編譯;

 3、自由高效:組合的思想、無侵入式的接口

4、擁有強大的標準庫

5、 部署方便:二進制文件,Copy部署

6、併發簡單


一、我爲什麼要學習GO語言?

1、接觸了Go語言編寫的程序

1年之內接觸的兩個新項目基礎都是Go語言,一個是華爲的kubeEdge項目,一個是聯盟鏈(區塊鏈的一種應用)。Go語言在這些新事物中的應用讓我開始思考,學習Go語言的必要性;

2、工作中遇到高併發的問題

使用java不僅容易出錯,而且學習相關的知識的時間成本非常高;而Go語言天生對高併發的良好支持讓我看到應對“高併發”編程的簡單、高效的辦法;

總結:隨着技術和項目經驗的積累,我已經不滿足於簡單使用別人做好的框架或者API接口去實現一個應用性的功能,這在IT行業中本來就是比較低端的工種,只要勤奮、認真,什麼行業的人2年時間都能幹的不錯,可替代性太強。如何讓自己變成不可替代的人物?挑戰高端的技術,完成核心的功能,開發新的框架,設計和製造“新輪子”,不能一直做裝配工。

二、Go語言有什麼競爭優勢?

 

與C++比,go的開發效率高,具有清晰的依賴管理和全自動垃圾回收機制,代碼量大幅減少。

與Java比,更簡明的類型系統。

與php比,go在性能上佔有明顯優勢,且通用性和規範性更好,更適合構建大型的軟件。

與python比,go在性能上佔有明顯優勢,因爲解釋型語言與編譯型語言在運行速度上不可同日而語,另外go在語法簡明和類型系統設計上優於python。

 我們都知道,java是面向對象的,在java的編程世界中一切都是對象,java在描述世界的時候採用的是繼承機制,而繼承機制不足以完全描述世界的本質,所以Java設計出面向切面編程和設計模式來補充它描述世界的能力。而Go語言不同,它對世界本質的理解是composition(組合),所以我們能夠看到類似C語言的結構體。

Go語言的特點:

Go語言接受了函數式編程的一些想法,支持匿名函數與閉包。再如,Go語言接受了以Erlang語言爲代表的面向消息編程思想,支持goroutine和通道,並推薦使用消息而不是共享內存來進行併發編程。總體來說,Go語言是一個非常現代化的語言,精小但非常強大。
Go 語言最主要的特性:

  • 自動垃圾回收 
  • 更豐富的內置類型 
  • 函數多返回值 
  • 錯誤處理 
  • 匿名函數和閉包 
  • 類型和接口 
  • 併發編程 
  • 反射 
  • 語言交互性

總結:

1、Go語言開發速度更快、更容易,同時可以獲得媲美C語言的高性能;

2、快速編譯;

 

 3、自由高效:組合的思想、無侵入式的接口


       Go語言可以說是開發效率和運行效率二者的完美融合,天生的併發編程支持。Go語言支持當前所有的編程範式,包括過程式編程、面向對象編程、面向接口編程、函數式編程。程序員們可以各取所需、自由組合、想怎麼玩就怎麼玩。

4、擁有強大的標準庫

5、 部署方便:二進制文件,Copy部署

6、併發簡單

並行和異步編程幾乎無痛點。Go 語言的 Goroutine 和 Channel 這兩個神器簡直就是併發和異步編程的巨大福音。像 C、C++、Java、Python 和 JavaScript 這些語言的併發和異步方式太控制就比較複雜了,而且容易出錯,而 Go 解決這個問題非常地優雅和流暢。這對於編程多年受盡併發和異步折磨的編程者來說,完全就是讓人眼前一亮的感覺。Go 是一種非常高效的語言,高度支持併發性。Go是爲大數據、微服務、併發而生的一種編程語言。
Go 作爲一門語言致力於使事情簡單化。它並未引入很多新概念,而是聚焦於打造一門簡單的語言,它使用起來異常快速並且簡單。其唯一的創新之處是 goroutines 和通道。Goroutines 是 Go 面向線程的輕量級方法,而通道是 goroutines 之間通信的優先方式。
創建 Goroutines 的成本很低,只需幾千個字節的額外內存,正由於此,才使得同時運行數百個甚至數千個 goroutines 成爲可能。可以藉助通道實現 goroutines 之間的通信。Goroutines 以及基於通道的併發性方法使其非常容易使用所有可用的 CPU 內核,並處理併發的 IO。相較於 Python/Java,在一個 goroutine 上運行一個函數需要最小的代碼。

三、如何學習Go語言

1、閱讀Goolgle的開源項目;Go語言是Goolgle的兒子,其開源項目也最有代表性;

 

go語言值得學習的開源項目推薦 

谷歌官方維護了一個基於go語言的開源項目列表:
https://github.com/golang/go/wiki/Projects
 
其中有非常多的優秀項目值得學習,有幾百行代碼適合新手閱讀的項目,也有大型如nsq、docker等的項目。
 
下面推薦幾款適合學習的項目:
1、cache2go
https://github.com/muesli/cache2go
比較簡單的一個緩存庫,代碼量很少,適合新手學習,可以學習到鎖、goroutines等。
 
2、groupcache
https://github.com/golang/groupcache
與memcached同一作者,相當於是memcached的go語言實現。
 
3、nsq
https://github.com/bitly/nsq
消息分發平臺,閱讀代碼可以瞭解到很多分佈式、負載均衡等方面的編程。
 
4、docker
https://github.com/docker/docker
時下很火的項目,個人感覺適合應用,不適合入門閱讀學習,待成爲了高手後可以研究下其實現。

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