[TOC]
# 說明
該文檔為本君在學習GO語言的過程做的筆記,并非官方權威文檔,僅供學習和參考。在后續的學習中會根據本人的學習進度更新文檔。
# GO語言教程
Go 是一個開源的編程語言,它能讓構造簡單、可靠且高效的軟件變得容易。
Go是從2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持開發,后來還加入了Ian Lance Taylor, Russ Cox等人,并最終于2009年11月開源,在2012年早些時候發布了Go 1穩定版本。現在Go的開發已經是完全開放的,并且擁有一個活躍的社區。
# Go主要特性
* 自動垃圾回收
* 更豐富的內置類型
* 函數多返回值
* 錯誤處理
* 匿名函數和閉包
* 類型和接口
* 反射
* 語言交互性
## 1、自動垃圾回收
能夠像java、C#等語言自帶GC,不用再為內存管理苦惱
### 2、更豐富的內置類型
關鍵在于內置,像map、slice這些常用的數據類型,內置于builtin,默認包含,無需自己添加。
### 3、函數返回多值
多值返回僅動態語言Python有此特性
### 4、錯誤處理
3個重要關鍵字defer、panic、recover
defer是函數結束后執行,呈先進后出;
panic是程序出現無法修復的錯誤時使用,但會讓defer執行完;
recover會修復錯誤,不至于程序終止。當不確定函數不會出錯時使用defer+recover
### 5、匿名函數和閉包
匿名函數就是一個沒有名字的函數,本身也是一個閉包。
閉包是可以包含自由變量的代碼塊,這些變量不在這個代碼塊內或者任何全局上下文中定義,而是在定義代碼塊的環境中定義。
閉包的價值在于可以作為函數對象或者匿名函數,存儲到變量中作為參數傳遞給其他函數,能夠被函數動態創建和返回。
### 6、類型和接口
類型非常接近于C語言中的結構體,也使用了struct。go語言類型不支持繼承和重載,僅有封裝和組合。
go語言引入了強大的“非侵入式”接口,無需指明類型實現了哪個接口。
### 7、并發編程
go語言倡導使用消息傳遞來共享內存,引入了goroutine概念,這是一個協程,更輕量級的線程。與channel搭配使用。
### 8、反射
通過反射,你可以獲取對象類型的詳細信息,并可動態操作對象。反射是把雙刃劍,功能強大但代碼可讀性并不理想。若非必要,不推薦使用反射。
# GO語言用途
Go 語言被設計成一門應用于搭載 Web 服務器,存儲集群或類似用途的巨型中央服務器的系統編程語言。對于高性能分布式系統領域而言,Go 語言無疑比大多數其它語言有著更高的開發效率。它提供了海量并行的支持,這對于游戲服務端的開發而言是再好不過了。
# GO語言開發工具
* LiteIDE
* Sublime Text
* Emacs
* Vim
* GoLand
* Eclipse
* IntelliJ IDEA
# GO語言開發框架
* Beego
* Buffala
* Echo
* Gin
* Revel
* Iris
* martini
* Goji
* go-rest
* Circuit