# Go 簡介
* * * * *
--: 作者:Mick
時間:2018年8月21日
* * * * *
### 能干啥
Go語言是非常有潛力的語言,是因為它的應用場景是目前互聯網非常熱門的幾個領域 :
1. 區塊鏈開發
2. 大型游戲服務端開發
3. 分布式/云計算開發 目前國外很多云平臺在采用Go開發CloudFoundy
4. 服務器編程,以前你如果使用C或者C++做的那些事情,用Go來做很合適,例如處理日志、數據打包、虛擬機處理、文件系統等
5. 分布式系統,數據庫代理器等
6. 網絡編程,這一塊目前應用最廣,包括Web應用、API應用、下載應用
7. 數據庫(分布式或緩存)
8. 微服務
### 優秀開源項目
1. 容器(及相關):runc, docker, coreos, codetainer, kitematic
2. 服務自理管理平臺: Kubernates
3. 微服務(含自動化部署/服務發現/調度器/etc):flynn, tsuru, deis, otto, terraform, consul, skydock, nomad, kubernetes
4. 數據庫(及相關): tiDB、etcd (鍵值), boltdb (鍵值/事務), cayley(圖),prometheus/seriesly (時間序列), cockroachdb, TiDB, influxdb, goleveldb,vitess, reborndb, pgweb, beedb
5. 其他:skydns, gryffin (Web安全), bosun (監控)
### 優秀框架
1. beego:web框架-》ThinkPHP
2. revel:強大的web框架-》Laravel
3. gwk(GO Web Server Kit)是GO語言的Web Server開發框架,簡單易用,擴展性好,而且兼容Go App Engine
### Go 的誕生
**谷歌工程師的20%時間**
谷歌的“20%時間”工作方式,允許工程師拿出20%的時間來研究自己喜歡的項目。
1. 語音服務Google Now
2. 谷歌新聞Google News
3. 谷歌地圖Google Map上的交通信息
4. Go語言
**誕生時間 **
Go 語言起源 2007 年,并于 2009 年正式對外發布。它從 2009 年 9 月 21 日開始作為谷歌公司 20% 兼職項目,即相關員工利用 20% 的空余時間來參與 Go 語言的研發工作
**開發作者 **
1. 肯尼斯·湯普遜(Ken Thompson) 是美國計算機科學學者和工程師。黑客文化圈子通常稱他為“ken”[1]。在貝爾實驗室工作期間,湯普遜設計和實現了Unix操作系統
2. 羅勃·派克(Rob Pike),來自加拿大的程序員,曾經加入貝爾實驗室,為 UNIX小組的成員。曾經參與過貝爾實驗室九號計劃、Inferno,與編程語言 Limbo的開發。他與肯·湯普遜共同開發了UTF-8
3. 羅伯特(Robert Griesemer) Robert已經為Google的V8 JavaScript引擎和Chubby(Google的GFS分布式文件系統的分布式鎖管理器)編寫了代碼。他還研究了特定領域語言SAWZALL、Java熱點虛擬機和StrutTalk系統的設計和實現。他還為Cay-Y-MP編寫了一個矢量化編譯器,并為APL編寫了一個解釋器。
### Go 優勢

1. 可直接編譯成機器碼,其性能與 Java 或 C++ 相似。在我們的使用中,Go 一般比 Python 要快 30 倍雙擊666
2. 靜態類型語言即強類型必須有類型
3. 天生的支持高并發,我曾經說過一句話,天生的基因和整容是有區別的,大家一樣美麗,但是你喜歡整容的還是天生基因的美麗呢?Go就是基因里面支持的并發,可以充分的利用多核,很容易的使用并發。
4. 內置runtime,支持垃圾回收,這屬于動態語言的特性之一
5. 簡單易學,語法簡單明了
6. 內置強大的工具,gofmt,test,godoc,build,clean,doc,env
7. 內嵌C支持,前面說了作者是C的作者,所以Go里面也可以直接包含c代碼,利用現有的豐富的C庫。
### Go 缺點
1. Go的import包不支持版本,有時候升級容易導致項目不可運行,所以需要自己控制相應的版本信息
2. Go的goroutine一旦啟動之后,不同的goroutine之間切換不是受程序控制,runtime調度的時候,需要嚴謹的邏輯,不然goroutine休眠,過一段時間邏輯結束了,突然冒出來又執行了,會導致邏輯出錯等情況
3. GC延遲有點大,我開發的日志系統傷過一次,同時并發很大的情況下,處理很大的日志,GC沒有那么快,內存回收不給力,后來經過profile程序改進之后得到了改善
4. pkg下面的圖片處理庫很多bug,還是使用成熟產品好,調用這些成熟庫imagemagick的接口比較靠譜
### 中國Go語言布道者-許式偉
在 QCon 2015 上海站上,許式偉曾經做過《Go 語言發展狀況》的主題分享。對于 Go 語言,他提到過三個預測:
第一個預測,我最早在 2012 年新浪微博里提過,Go 語言 10 年內一定會超過 C 和 Java,變成排行榜第一的語言。今天大家可能會略相信,但在 2012 年的時候沒有多少人會相信,即使今天講出來,絕大部分人都會覺得太早,畢竟它還沒有排進前五。
第二個預測,Go 語言將在兩年內制霸云計算領域。
第三個預測,Go 將統治下一個 10 年。(來自于 Deferpanic 創始人 Lan Eyberg)。