一、GO 语言简介

Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言。Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style 并发计算。
与 C++ 相比,Go 并不包括如枚举、异常处理、继承、泛型、断言、虚函数等功能,但增加了切片 (Slice) 型、并发、管道、垃圾回收、接口(Interface)等特性的语言级支持。Go 2.0 版本将支持泛型。

二、Go 环境搭建

1、要搭建 Go 语言开发环境,我们第一步要下载 go 的开发工具包,
安装包下载地址为:https://golang.org/dl/
如果打不开可以使用这个地址:https://golang.google.cn/dl/

打开之后根据自己的操作系统下载对应版本的安装包。开发工具包又分为安装版和压缩版,安装版的工具包双击打开会出现安装向导,选择安装的路径,会自动设置好环境变量等信息,用起来比较方便一些。这里选择安装版的工具包进行安装。

2、安装 Go
①.双击运行安装文件,然后设置安装目录,点击开始安装就可以了。使用安装版的工具包安装完成后会自动添加好 GOPATH 的环境变量,如果是使用压缩版安装的需要手动添加 GOPATH(刚刚安装的 go 路径)环境变量,并且在 PATH 变量中添加;%USERPROFILE%\go\bin。
 
②.打开终端,输入 go version 命令,显示出当前 go 的版本就是安装成功了。
 
③.安装好 go 环境之后,就可以在命令行使用 go run 命令运行 go 脚本了。
 

三、GO 重点语法

1、切片(Slice)
Go 语言切片是对数组的一种抽象。
Go 数组的长度是不可以改变的,在特定场景中这样的集合就不太适用,Go 中提供了一种灵活,功能强悍的内置类型切片 ("动态数组"),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。
 
①.定义切片
可以声明一个未指定大小的数组来定义切片:var identifier [] type,或使用 make() 函数来创建切片:var slice1 [] type = make([] type, len);也可以指定容量,其中 capacity 为可选参数。make([] T, length, capacity)。
 
②.切片初始化
直接初始化切片,s :=[] int {1,2,3 },[] 表示是切片类型,{1,2,3}初始化值依次是 1,2,3.其 cap=len=3。
初始化切片 s,是数组 arr 的引用,s := arr[startIndex:endIndex],将 arr 中从下标 startIndex 到 endIndex-1 下的元素创建为一个新的切片。s := arr[startIndex:] ,默认 endIndex 时将表示一直到 arr 的最后一个元素。s := arr[:endIndex] ,默认 startIndex 时将表示从 arr 的第一个元素开始。
 
③.len() 和 cap() 函数
切片是可索引的,并且可以由 len() 方法获取长度。由 cap() 方法可以测量切片最长可以达到多少。
 
④.append() 和 copy() 函数
如果想增加切片的容量,我们必须创建一个新的更大的切片并把原分片的内容都拷贝过来。可以使用 append() 方法向切片中追加元素,使用 copy() 方法复制切片。
 

2、指针
Go 语言的取地址符是&,放到一个变量前使用就会返回相应变量的内存地址。一个指针变量指向了一个值的内存地址。
 
①.我们可以使用一下方式声明一个指针变量:

varvar_name*var-type

var-type 为指针类型,var_name 为指针变量名,* 号用于指定变量是作为一个指针。以下是有效的指针声明:

varip*int/* 指向整型*/
varfp*float32    /* 指向浮点型 */

 
②.指针使用流程:
首先,定义一个指针变量;然后,为指针变量赋值;赋值之后就可以访问指针变量中指向地址的值。
在指针类型前面加上 * 号(前缀)来获取指针所指向的内容。
实例:

func main() {
var a int= 20   /* 声明实际变量 */
varip *int        /* 声明指针变量 */
ip = &a  /* 指针变量的存储地址 */
fmt.Printf("a 变量的地址是: %x\n", &a  )
 /* 指针变量的存储地址 */
fmt.Printf("ip变量储存的指针地址: %x\n", ip )
/* 使用指针访问值 */
fmt.Printf("*ip变量的值: %d\n", *ip )
}

 
③.Go 空指针
当一个指针被定义后没有分配到任何变量时,它的值为 nil。nil 指针也称为空指针。
nil 在概念上和其它语言的 null、None、nil、NULL 一样,都指代零值或空值。
查看以下实例:

func main() {
varptr *int
fmt.Printf("ptr的值为 : %x\n", ptr  )
}

以上实例输出结果为:
ptr 的值为 : 0
 
3、管道
管道 (Channel) 是 Go 语言中比较重要的部分,经常在 Go 中的并发中使用。
 
①.管道的定义
varchanNamechanElemType,这里 ElemType 是指此管道所传递的类型。也可以使用 make() 方法来定义管道,ch := make(chanint, 100),size 可以省略。
 
②.管道的一些操作
<-操作符可以由管道中读写数据,需要注意,<-操作符是与最左边的 chan 优先结合的。
向管道中写入一个数据,在此需要注意:向管道中写入数据通常会导致程序阻塞,直到有其他 goroutine 从这个管道中读取数据。
读取数据时,需要注意:如果管道中没有数据,那么从管道中读取数据会导致程序阻塞,直到有数据。
关闭 channel,直接调用 close() 即可, close(ch)。
判断 ch 是否关闭可以使用,x, ok := <-ch,判断 ok 的值,如果是 false,则说明已经关闭 (关闭的话读取是不会阻塞的)。
 
③.单向管道

var ch1 chan<- float64     // 只能向里面写入float64的数据,不能读取
var ch2 <-chanint         // 只能读取int型数据

 
这里只介绍几种 go 语言重要的语法,更加详细的知识大家可以参考 go 语言相关的文档:https://studygolang.com/resources/26

四、常用 GO web 框架

①.Beego
beego 是一个开源的 Go 应用 HTTP 框架,他可以用来快速开发 API、Web 以及后端服务等各种应用。是一个完整的 MVC 框架,有自己的日志库、ORM 和 Web 框架。你不需要再去安装第三方库。它有一个称为 Bee Tool 的内置工具,用于监视代码更改,并在检测到更改时运行任务。
 
②.Iris
Iris 号称是最快的 Go 后端 web 框架。支持 http2,完备的 MVC 支持。性能非常卓越,在众多 web 框架中遥遥领先。另外 iris 提供的 api 都是极简风格,很容易上手。支持中间件扩展,拥有丰富的中间件生态库。拥有强大的路由功能,可以轻易的构建各种形式的 RESTful API,路由分组、静态路由、动态路径参数化、通配符路由等待。还有 http 错误定义、上下文处理器、身份验证、视图模板、热重启、Websocket 支持等等功能。
 
③.Buffalo
Buffalo 是一个快速又简单的 web 框架。当你开始一个新项目时,Buffalo 可以为你提供一切——从前端到后端开发。Buffalo 不仅仅是一个框架——它也是一个整体的 Web 开发生态系统,可以让你直接构建应用程序。
 
另外还有很多 Go 的开源框架,例如:Goji、Martini、Gin Gonic、Gocraft 等,大家可以根据自己的实际应用和不同框架的特性来进行选择。


↙↙↙阅读原文可查看相关链接,并与作者交流