手撕 GOLANG
作者:吴科
2019-4-29
手撕 Go 语言
1
目录
版本说明........................................................................................................................................... 7
一、 初识 ................................................................................................................................... 8
1. 简介 ................................................................................................................................... 8
2. 历史 ................................................................................................................................... 8
3. 创造 ................................................................................................................................... 8
4. 特性 ................................................................................................................................... 8
5. 应用 ................................................................................................................................... 9
6. 安装 ................................................................................................................................... 9
1) Windows ..................................................................................................................... 9
2) Linux ....................................................................................................................... 13
7. 编辑器 ............................................................................................................................. 14
二、 如何学习 ......................................................................................................................... 15
三、 Golang 基础 .................................................................................................................... 15
1. 第一个 Go 程序 ............................................................................................................... 15
2. 程序结构 ......................................................................................................................... 16
3. 基本组成元素 ................................................................................................................. 16
1) 标识符 ..................................................................................................................... 16
2) 关键字 ..................................................................................................................... 17
3) 字面量 ..................................................................................................................... 17
4) 操作符 ..................................................................................................................... 17
5) 分割符 ..................................................................................................................... 17
4. 声明 ................................................................................................................................. 17
5. 变量 ................................................................................................................................. 18
6. 简短声明 ......................................................................................................................... 19
7. 赋值 ................................................................................................................................. 20
8. 常量 ................................................................................................................................. 21
9. 作用域 ............................................................................................................................. 23
10. 注释 ......................................................................................................................... 23
11. 问题跟踪 ................................................................................................................. 24
四、 基础数据类型 ................................................................................................................. 25
1. 布尔类型 ......................................................................................................................... 25
2. 数值类型 ......................................................................................................................... 27
1) 整型 ......................................................................................................................... 27
2) 浮点型 ..................................................................................................................... 30
3) 复数型 ..................................................................................................................... 32
3. 字符串类型 ..................................................................................................................... 33
4. 枚举类型 ......................................................................................................................... 36
5. 指针类型 ......................................................................................................................... 36
五、 流程控制 ......................................................................................................................... 38
1. 条件语句 ......................................................................................................................... 39
1) if ............................................................................................................................. 39
2) if-else ................................................................................................................... 40
手撕 Go 语言 吴科 782874382
3) else if ................................................................................................................... 40
4) 初始化子语句 ......................................................................................................... 41
5) 总结 ......................................................................................................................... 41
2. 选择语句 ......................................................................................................................... 41
1) switch-case 单值 .................................................................................................. 42
2) switch-case 表达式 .............................................................................................. 42
3) 初始化子语句 ......................................................................................................... 43
4) fallthrough ........................................................................................................... 43
5) 总结 ......................................................................................................................... 44
3. 循环语句 ......................................................................................................................... 44
1) for ........................................................................................................................... 44
2) break 与 continue 语句 ........................................................................................ 45
3) 类 while .................................................................................................................. 45
4) 无限循环 ................................................................................................................. 45
5) for-range ............................................................................................................... 46
4. label 与 goto ................................................................................................................. 46
5. 练习 ................................................................................................................................. 48
1) 乘法口诀 ................................................................................................................. 48
2) 猜数游戏 ................................................................................................................. 49
六、 复合数据类型 ................................................................................................................. 49
1. 数组(array) ................................................................................................................... 49
1) 声明 ......................................................................................................................... 49
2) 字面量 ..................................................................................................................... 50
3) 操作 ......................................................................................................................... 50
4) 多维数组 ................................................................................................................. 51
2. 切片(slice) ................................................................................................................... 52
1) 声明 ......................................................................................................................... 52
2) 初始化 ..................................................................................................................... 52
3) 操作 ......................................................................................................................... 53
4) 使用 ......................................................................................................................... 55
5) 多维切片 ................................................................................................................. 56
6) 常用包 ..................................................................................................................... 56
3. 映射(map) ....................................................................................................................... 56
1) 声明 ......................................................................................................................... 57
2) 初始化 ..................................................................................................................... 57
3) 操作 ......................................................................................................................... 57
4) 使用 ......................................................................................................................... 58
七、 函数 ................................................................................................................................. 59
1. 定义&调用 ....................................................................................................................... 59
1) 定义 ......................................................................................................................... 59
2) 调用 ......................................................................................................................... 60
2. 参数 ................................................................................................................................. 61
1) 类型合并 ................................................................................................................. 61
2) 可变参数 ................................................................................................................. 61
手撕 Go 语言
3
3. 返回值 ............................................................................................................................. 62
1) 多返回值 ................................................................................................................. 62
2) 命名返回值 ............................................................................................................. 62
4. 递归 ................................................................................................................................. 62
5. 函数类型 ......................................................................................................................... 63
1) 声明&初始化&调用 ................................................................................................. 64
2) 声明&调用参数类型为函数的函数 ....................................................................... 64
6. 匿名函数与闭包 ............................................................................................................. 65
1) 匿名函数 ................................................................................................................. 65
2) 闭包 ......................................................................................................................... 65
7. 值类型&引用类型 ........................................................................................................... 66
8. 值传递和引用传递 ......................................................................................................... 67
1) 值传递 ..................................................................................................................... 67
2) 引用传递 ................................................................................................................. 67
9. 错误处理 ......................................................................................................................... 68
1) error 接口 .............................................................................................................. 68
2) defer ....................................................................................................................... 69
3) panic 与 recover 函数 .......................................................................................... 69
八、 包..................................................................................................................................... 71
1. 声明 ................................................................................................................................. 71
2. 导入&调用 ....................................................................................................................... 72
3. 导入形式 ......................................................................................................................... 74
4. 成员可见性 ..................................................................................................................... 75
5. main 包与 main 函数 ...................................................................................................... 75
6. init 函数 ........................................................................................................................ 75
7. Go 包管理 ........................................................................................................................ 76
1) 介绍 ......................................................................................................................... 76
2) GOPATH+vendor 机制 .............................................................................................. 76
3) Go modules 机制 .................................................................................................... 77
8. 标准包 ............................................................................................................................. 79
1) godoc 工具 .............................................................................................................. 79
2) 帮助 ......................................................................................................................... 80
九、 结构体 ............................................................................................................................. 81
1. 自定义类型 ..................................................................................................................... 81
2. 定义 ................................................................................................................................. 82
3. 声明 ................................................................................................................................. 83
4. 初始化 ............................................................................................................................. 83
5. New 函数 .......................................................................................................................... 84
6. 属性的访问和修改 ......................................................................................................... 84
7. 匿名结构体 ..................................................................................................................... 85
8. 命名嵌入 ......................................................................................................................... 85
1) 定义 ......................................................................................................................... 86
2) 声明和初始化 ......................................................................................................... 86
3) 属性的访问和修改 ................................................................................................. 87
手撕 Go 语言 吴科 782874382
9. 匿名嵌入 ......................................................................................................................... 87
1) 定义 ......................................................................................................................... 87
2) 声明&初始化 ........................................................................................................... 87
3) 属性访问和修改 ..................................................................................................... 88
10. 指针类型嵌入 ......................................................................................................... 90
1) 定义 ......................................................................................................................... 90
2) 声明&初始化&操作 ................................................................................................. 91
11. 可见性 ..................................................................................................................... 92
十、 方法 ................................................................................................................................. 93
1. 定义 ................................................................................................................................. 93
2. 调用 ................................................................................................................................. 93
3. 指针接收者 ..................................................................................................................... 94
4. 匿名嵌入 ......................................................................................................................... 95
5. 方法值/方法表达式 ....................................................................................................... 97
1) 方法值 ..................................................................................................................... 97
2) 方法表达式 ............................................................................................................. 98
3) 自动生成指针接收者方法 ..................................................................................... 98
十一、 接口 ....................................................................................................................... 100
1. 定义 ............................................................................................................................... 100
2. 声明 ............................................................................................................................... 100
3. 赋值 ............................................................................................................................... 101
1) 类型对象 ............................................................................................................... 101
2) 接口对象 ............................................................................................................... 103
4. 类型断言&查询 ............................................................................................................. 104
1) 断言 ....................................................................................................................... 104
2) 查询 ....................................................................................................................... 104
5. 接口匿名嵌入 ............................................................................................................... 105
1) 定义 ....................................................................................................................... 105
2) 实现 ....................................................................................................................... 106
3) 使用 ....................................................................................................................... 106
6. 匿名接口 ....................................................................................................................... 107
7. 空接口 ........................................................................................................................... 107
1) 定义 ....................................................................................................................... 107
2) 使用场景 ............................................................................................................... 108
十二、 反射 ....................................................................................................................... 108
1. Type ............................................................................................................................... 108
1) 通用方法 ............................................................................................................... 109
2) 特定类型方法 ....................................................................................................... 109
2. Value ............................................................................................................................. 110
1) 创建方法 ............................................................................................................... 110
2) 通用方法 ............................................................................................................... 110
3) 修改方法 ............................................................................................................... 110
4) 调用方法 ............................................................................................................... 110
5) 特定类型方法 ....................................................................................................... 111