[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