目录
1. 初识 Go 语言......................................................................................................................................... 8
1.1 Go 语言介绍.....................................................................................................................................8
1.1.1 Go 语言是什么........................................................................................................................8
1.1.2 Go 语言优势.............................................................................................................................8
1.1.3 Go 适合用来做什么...............................................................................................................8
1.2 环境搭建...........................................................................................................................................9
1.2.1 安装和设置..............................................................................................................................9
1.2.2 标准命令概述......................................................................................................................... 9
1.2.3 学习资料.................................................................................................................................. 9
1.3 第一个 Go 程序............................................................................................................................10
1.3.1 Hello Go.................................................................................................................................. 10
1.3.2 代码分析................................................................................................................................10
1.3.3 命令行运行程序.................................................................................................................. 11
2. 基础类型...............................................................................................................................................11
2.1 命名................................................................................................................................................. 11
2.2 变量................................................................................................................................................. 12
2.2.1 变量声明................................................................................................................................12
2.2.2 变量初始化........................................................................................................................... 13
2.2.3 变量赋值................................................................................................................................13
2.2.4 匿名变量................................................................................................................................13
2.3 常量................................................................................................................................................. 14
2.3.1 字面常量(常量值)................................................................................................................14
2.3.2 常量定义................................................................................................................................14
2.3.3 iota 枚举..................................................................................................................................15
2.4 基础数据类型...............................................................................................................................17
2.4.1 分类......................................................................................................................................... 17
2.4.2 布尔类型................................................................................................................................18
2.4.3 整型......................................................................................................................................... 18
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
1
2.4.4 浮点型.....................................................................................................................................18
2.4.5 字符类型................................................................................................................................18
2.4.6 字符串.....................................................................................................................................19
2.4.7 复数类型................................................................................................................................19
2.5 fmt 包的格式化输出输入...........................................................................................................20
2.5.1 格式说明................................................................................................................................20
2.5.2 输出......................................................................................................................................... 21
2.5.3 输人......................................................................................................................................... 21
2.6 类型转换........................................................................................................................................22
2.7 类型别名........................................................................................................................................22
3. 运算符....................................................................................................................................................22
3.1 算术运算符....................................................................................................................................22
3.2 关系运算符....................................................................................................................................23
3.3 逻辑运算符....................................................................................................................................23
3.4 位运算符........................................................................................................................................23
3.5 赋值运算符....................................................................................................................................24
3.6 其他运算符....................................................................................................................................24
3.7 运算符优先级...............................................................................................................................24
4. 流程控制...............................................................................................................................................25
4.1 选择结构........................................................................................................................................25
4.1.1 if 语句.......................................................................................................................................25
4.1.2 switch 语句.............................................................................................................................26
4.2 循环语句........................................................................................................................................27
4.2.1 for..............................................................................................................................................27
4.2.2 range........................................................................................................................................27
4.3 跳转语句........................................................................................................................................28
4.3.1 break 和 continue................................................................................................................ 28
4.3.2 goto..........................................................................................................................................28
5. 函数........................................................................................................................................................ 29
5.1 定义格式........................................................................................................................................29
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
2
5.2 自定义函数....................................................................................................................................29
5.2.1 无参无返回值.......................................................................................................................29
5.2.2 有参无返回值.......................................................................................................................30
5.2.3 无参有返回值.......................................................................................................................31
5.2.4 有参有返回值.......................................................................................................................32
5.3 递归函数........................................................................................................................................33
5.4 函数类型........................................................................................................................................34
5.5 匿名函数与闭包.......................................................................................................................... 34
5.6 延迟调用 defer..............................................................................................................................37
5.6.1 defer 作用...............................................................................................................................37
5.6.2 多个 defer 执行顺序.......................................................................................................... 37
5.6.3 defer 和匿名函数结合使用...............................................................................................38
5.7 获取命令行参数.......................................................................................................................... 38
5.8 作用域.............................................................................................................................................39
5.8.1 局部变量................................................................................................................................39
5.8.2 全局变量................................................................................................................................40
5.8.3 不同作用域同名变量.........................................................................................................40
6. 工程管理...............................................................................................................................................41
6.1 工作区.............................................................................................................................................41
6.1.1 工作区介绍........................................................................................................................... 41
6.1.2 GOPATH 设置....................................................................................................................... 42
6.2 包......................................................................................................................................................42
6.2.1 自定义包................................................................................................................................42
6.2.2 main 包....................................................................................................................................43
6.2.3 main 函数和 init 函数......................................................................................................... 43
6.2.4 导入包.....................................................................................................................................45
6.3 测试案例........................................................................................................................................47
6.3.1 测试代码................................................................................................................................47
6.3.2 GOPATH 设置....................................................................................................................... 49
6.3.3 编译运行程序.......................................................................................................................50
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
3
6.3.4 go install 的使用...................................................................................................................50
7. 复合类型...............................................................................................................................................52
7.1 分类................................................................................................................................................. 52
7.2 指针................................................................................................................................................. 52
7.2.1 基本操作................................................................................................................................52
7.2.2 new 函数.................................................................................................................................53
7.2.3 指针做函数参数.................................................................................................................. 53
7.3 数组................................................................................................................................................. 54
7.3.1 概述......................................................................................................................................... 54
7.3.2 操作数组................................................................................................................................54
7.3.3 在函数间传递数组..............................................................................................................55
7.4 slice................................................................................................................................................... 56
7.4.1 概述......................................................................................................................................... 56
7.4.2 切片的创建和初始化.........................................................................................................56
7.4.3 切片的操作........................................................................................................................... 57
7.4.4 切片做函数参数.................................................................................................................. 59
7.5 map....................................................................................................................................................60
7.5.1 概述......................................................................................................................................... 60
7.5.2 创建和初始化.......................................................................................................................60
7.5.3 常用操作................................................................................................................................61
7.5.4 map 做函数参数...................................................................................................................62
7.6 结构体.............................................................................................................................................63
7.6.1 结构体类型........................................................................................................................... 63
7.6.2 结构体初始化.......................................................................................................................64
7.6.3 结构体成员的使用..............................................................................................................64
7.6.4 结构体比较........................................................................................................................... 65
7.6.5 结构体作为函数参数.........................................................................................................66
7.6.6 可见性.....................................................................................................................................66
8. 面向对象编程......................................................................................................................................68
8.1 概述................................................................................................................................................. 68
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
4
8.2 匿名组合........................................................................................................................................68
8.2.1 匿名字段................................................................................................................................68
8.2.2 初始化.....................................................................................................................................69
8.2.3 成员的操作........................................................................................................................... 69
8.2.4 同名字段................................................................................................................................70
8.2.5 其它匿名字段.......................................................................................................................71
8.3 方法................................................................................................................................................. 72
8.3.1 概述......................................................................................................................................... 72
8.3.2 为类型添加方法.................................................................................................................. 73
8.3.3 值语义和引用语义..............................................................................................................74
8.3.4 方法集.....................................................................................................................................75
8.3.5 匿名字段................................................................................................................................77
8.3.6 表达式.....................................................................................................................................78
8.4 接口................................................................................................................................................. 80
8.4.1 概述......................................................................................................................................... 80
8.4.2 接口的使用........................................................................................................................... 80
8.4.3 接口组合................................................................................................................................82
8.4.4 空接口.....................................................................................................................................84
8.4.5 类型查询................................................................................................................................84
9. 异常处理...............................................................................................................................................86
9.1 error 接口........................................................................................................................................ 86
9.2 panic..................................................................................................................................................88
9.3 recover..............................................................................................................................................90
10. 文本文件处理................................................................................................................................... 91
10.1 字符串处理................................................................................................................................. 91
10.1.1 字符串操作.........................................................................................................................91
10.1.2 字符串转换.........................................................................................................................94
10.2 正则表达式................................................................................................................................. 95
10.3 JSON 处理....................................................................................................................................98
10.3.1 编码 JSON...........................................................................................................................98
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
5
10.3.2 解码 JSON........................................................................................................................ 101
10.4 文件操作................................................................................................................................... 104
10.4.1 相关 api 介绍...................................................................................................................104
10.4.2 示例代码........................................................................................................................... 105
10.4.3 案例:拷贝文件............................................................................................................. 106
11. 并发编程.......................................................................................................................................... 108
11.1 概述.............................................................................................................................................108
11.1.1 并行和并发.......................................................................................................................108
11.1.2 Go 语言并发优势............................................................................................................ 110
11.2 goroutine..................................................................................................................................... 110
11.2.1 goroutine 是什么............................................................................................................ 110
11.2.2 创建 goroutine................................................................................................................110
11.2.3 主 goroutine 先退出......................................................................................................111
11.2.4 runtime 包......................................................................................................................... 112
11.3 channel.........................................................................................................................................114
11.3.1 channel 类型.....................................................................................................................114
11.3.2 无缓冲的 channel...........................................................................................................115
11.3.3 有缓冲的 channel...........................................................................................................117
11.3.4 range 和 close.................................................................................................................. 119
11.3.5 单方向的 channel...........................................................................................................121
11.3.6 定时器................................................................................................................................122
11.4 select............................................................................................................................................ 124
11.4.1 select 作用......................................................................................................................... 124
11.4.2 超时.................................................................................................................................... 125
12. 网络编程.......................................................................................................................................... 126
12.1 网络概述................................................................................................................................... 126
12.1.1 网络协议........................................................................................................................... 126
12.1.2 分层模型........................................................................................................................... 126
12.2 Socket 编程................................................................................................................................ 129
12.2.1 什么是 Socket..................................................................................................................129
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
6
12.2.2 TCP 的 C/S 架构...............................................................................................................130
12.2.3 示例程序........................................................................................................................... 130
12.3 HTTP 编程................................................................................................................................. 133
12.3.1 概述.................................................................................................................................... 133
12.3.2 HTTP 报文浅析.................................................................................................................135
12.3.3 HTTP 编程..........................................................................................................................141
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
7
1. 初识 Go 语言
1.1 Go 语言介绍
1.1.1 Go 语言是什么
2009 年 11 月 10 日,Go 语言正式成为开源编程语言家庭的一员。
Go 语言(或称 Golang)是云计算时代的 C 语言。Go 语言的诞生是为了让程序员有更高的
生产效率,Go 语言专门针对多处理器系统应用程序的编程进行了优化,使用 Go 编译的程
序可以媲美 C 或 C++代码的速度,而且更加安全、支持并行进程。
开发人员在为项目选择语言时,不得不在快速开发和性能之间做出选择。C 和 C++这类语言
提供了很快的执行速度,而 Ruby 和 Python 这类语言则擅长快速开发。Go 语言在这两者
间架起了桥梁,不仅提供了高性能的语言,同时也让开发更快速。
1.1.2 Go 语言优势
可直接编译成机器码,不依赖其他库,glibc 的版本有一定要求,部署就是扔一个文件
上去就完成了。
静态类型语言,但是有动态语言的感觉,静态类型的语言就是可以在编译的时候检查出
来隐藏的大多数问题,动态语言的感觉就是有很多的包可以使用,写起来的效率很高。
语言层面支持并发,这个就是 Go 最大的特色,天生的支持并发。Go 就是基因里面支
持的并发,可以充分的利用多核,很容易的使用并发。
内置 runtime,支持垃圾回收,这属于动态语言的特性之一吧,虽然目前来说 GC(内存
垃圾回收机制)不算完美,但是足以应付我们所能遇到的大多数情况,特别是 Go1.1 之
后的 GC。
简单易学,Go 语言的作者都有 C 的基因,那么 Go 自然而然就有了 C 的基因,那么 Go
关键字是 25 个,但是表达能力很强大,几乎支持大多数你在其他语言见过的特性:继
承、重载、对象等。
丰富的标准库,Go 目前已经内置了大量的库,特别是网络库非常强大。
内置强大的工具,Go 语言里面内置了很多工具链,最好的应该是 gofmt 工具,自动化
格式化代码,能够让团队 review 变得如此的简单,代码格式一模一样,想不一样都很
困难。
跨平台编译,如果你写的 Go 代码不包含 cgo,那么就可以做到 window 系统编译 linux
的应用,如何做到的呢?Go 引用了 plan9 的代码,这就是不依赖系统的信息。
内嵌 C 支持,Go 里面也可以直接包含 C 代码,利用现有的丰富的 C 库。
1.1.3 Go 适合用来做什么
服务器编程,以前你如果使用 C 或者 C++做的那些事情,用 Go 来做很合适,例如处理
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
8