logo资料库

go开发实战.doc

第1页 / 共144页
第2页 / 共144页
第3页 / 共144页
第4页 / 共144页
第5页 / 共144页
第6页 / 共144页
第7页 / 共144页
第8页 / 共144页
资料共144页,剩余部分请下载后查看
1. 初识Go语言
1.1 Go语言介绍
1.1.1 Go语言是什么
1.1.2 Go语言优势
1.1.3 Go适合用来做什么
1.2 环境搭建
1.2.1 安装和设置
1.2.2 标准命令概述
1.2.3 学习资料
1.3 第一个Go程序
1.3.1 Hello Go
1.3.2 代码分析
1.3.3 命令行运行程序
2. 基础类型
2.1 命名
2.2 变量
2.2.1 变量声明
2.2.2 变量初始化
2.2.3 变量赋值
2.2.4 匿名变量
2.3 常量
2.3.1 字面常量(常量值)
2.3.2 常量定义
2.3.3 iota枚举
2.4 基础数据类型
2.4.1 分类
2.4.2 布尔类型
2.4.3 整型
2.4.4 浮点型
2.4.5 字符类型
2.4.6 字符串
2.4.7 复数类型
2.5 fmt包的格式化输出输入
2.5.1 格式说明
2.5.2 输出
2.5.3 输人
2.6 类型转换
2.7 类型别名
3. 运算符
3.1 算术运算符
3.2 关系运算符
3.3 逻辑运算符
3.4 位运算符
3.5 赋值运算符
3.6 其他运算符
3.7 运算符优先级
4. 流程控制
4.1 选择结构
4.1.1 if语句
4.1.1.1 if
4.1.1.2 if ... else
4.1.1.3 if ... else if ... else
4.1.2 switch语句
4.2 循环语句
4.2.1 for
4.2.2 range
4.3 跳转语句
4.3.1 break和continue
4.3.2 goto
5. 函数
5.1 定义格式
5.2 自定义函数
5.2.1 无参无返回值
5.2.2 有参无返回值
5.2.2.1 普通参数列表
5.2.2.2 不定参数列表
1) 不定参数类型
2) 不定参数的传递
5.2.3 无参有返回值
5.2.3.1 一个返回值
5.2.3.2 多个返回值
5.2.4 有参有返回值
5.3 递归函数
5.4 函数类型
5.5 匿名函数与闭包
5.6 延迟调用defer
5.6.1 defer作用
5.6.2 多个defer执行顺序
5.6.3 defer和匿名函数结合使用
5.7 获取命令行参数
5.8 作用域
5.8.1 局部变量
5.8.2 全局变量
5.8.3 不同作用域同名变量
6. 工程管理
6.1 工作区
6.1.1 工作区介绍
6.1.2 GOPATH设置
6.2 包
6.2.1 自定义包
6.2.2 main包
6.2.3 main函数和init函数
6.2.4 导入包
6.2.4.1 点操作
6.2.4.2 别名操作
6.2.4.3 _操作
6.3 测试案例
6.3.1 测试代码
6.3.2 GOPATH设置
6.3.2.1 windows
6.3.2.2 linux
6.3.3 编译运行程序
6.3.4 go install的使用
7. 复合类型
7.1 分类
7.2 指针
7.2.1 基本操作
7.2.2 new函数
7.2.3 指针做函数参数
7.3 数组
7.3.1 概述
7.3.2 操作数组
7.3.3 在函数间传递数组
7.4 slice
7.4.1 概述
7.4.2 切片的创建和初始化
7.4.3 切片的操作
7.4.3.1 切片截取
7.4.3.2 切片和底层数组关系
7.4.3.3 内建函数
1) append
2) copy
7.4.4 切片做函数参数
7.5 map
7.5.1 概述
7.5.2 创建和初始化
7.5.2.1 map的创建
7.5.2.2 初始化
7.5.3 常用操作
7.5.3.1 赋值
7.5.3.2 遍历
7.5.3.3 删除
7.5.4 map做函数参数
7.6 结构体
7.6.1 结构体类型
7.6.2 结构体初始化
7.6.2.1 普通变量
7.6.2.2 指针变量
7.6.3 结构体成员的使用
7.6.3.1 普通变量
7.6.3.2 指针变量
7.6.4 结构体比较
7.6.5 结构体作为函数参数
7.6.5.1 值传递
7.6.5.2 引用传递
7.6.6 可见性
8. 面向对象编程
8.1 概述
8.2 匿名组合
8.2.1 匿名字段
8.2.2 初始化
8.2.3 成员的操作
8.2.4 同名字段
8.2.5 其它匿名字段
8.2.5.1 非结构体类型
8.2.5.2 结构体指针类型
8.3 方法
8.3.1 概述
8.3.2 为类型添加方法
8.3.2.1 基础类型作为接收者
8.3.2.2 结构体作为接收者
8.3.3 值语义和引用语义
8.3.4 方法集
8.3.4.1 类型 *T 方法集
8.3.4.2 类型 T 方法集
8.3.5 匿名字段
8.3.5.1 方法的继承
8.3.5.2 方法的重写
8.3.6 表达式
8.3.6.1 方法值
8.3.6.2 方法表达式
8.4 接口
8.4.1 概述
8.4.2 接口的使用
8.4.2.1 接口定义
8.4.2.2 接口实现
8.4.3 接口组合
8.4.3.1 接口嵌入
8.4.3.2 接口转换
8.4.4 空接口
8.4.5 类型查询
8.4.5.1 comma-ok断言
8.4.5.2 switch测试
9. 异常处理
9.1 error接口
9.2 panic
9.3 recover
10. 文本文件处理
10.1 字符串处理
10.1.1 字符串操作
10.1.1.1 Contains
10.1.1.2 Join
10.1.1.3 Index
10.1.1.4 Repeat
10.1.1.5 Replace
10.1.1.6 Split
10.1.1.7 Trim
10.1.1.8 Fields
10.1.2 字符串转换
10.1.2.1 Append
10.1.2.2 Format
10.1.2.3 Parse
10.2 正则表达式
10.3 JSON处理
10.3.1 编码JSON
10.3.1.1 通过结构体生成JSON
1) 编码JSON
2) struct tag
10.3.1.2 通过map生成JSON
10.3.2 解码JSON
10.3.2.1 解析到结构体
10.3.2.2 解析到interface
10.4 文件操作
10.4.1 相关api介绍
10.4.1.1 建立与打开文件
10.4.1.2 写文件
10.4.1.3 读文件
10.4.1.4 删除文件
10.4.2 示例代码
10.4.2.1 写文件
10.4.2.2 读文件
10.4.3 案例:拷贝文件
11. 并发编程
11.1 概述
11.1.1 并行和并发
11.1.2 Go语言并发优势
11.2 goroutine
11.2.1 goroutine是什么
11.2.2 创建goroutine
11.2.3 主goroutine先退出
11.2.4 runtime包
11.2.4.1 Gosched
11.2.4.2 Goexit
11.2.4.3 GOMAXPROCS
11.3 channel
11.3.1 channel类型
11.3.2 无缓冲的channel
11.3.3 有缓冲的channel
11.3.4 range和close
11.3.5 单方向的channel
11.3.6 定时器
11.3.6.1 Timer
11.3.6.2 Ticker
11.4 select
11.4.1 select作用
11.4.2 超时
12. 网络编程
12.1 网络概述
12.1.1 网络协议
12.1.2 分层模型
12.1.2.1 网络分层架构
12.1.2.2 层与协议
12.1.2.3 每层协议的功能
1) 链路层
2) 网络层
3) 传输层
4) 应用层
12.2 Socket编程
12.2.1 什么是Socket
12.2.2 TCP的C/S架构
12.2.3 示例程序
12.2.3.1 服务器代码
12.2.3.2 客服端代码
12.2.3.3 运行结果
12.3 HTTP编程
12.3.1 概述
12.3.1.1 Web工作方式
12.3.1.2 HTTP协议
12.3.1.3 地址(URL)
12.3.2 HTTP报文浅析
12.3.2.1 请求报文格式
1) 测试代码
2) 请求报文格式说明
12.3.2.2 响应报文格式
1) 测试代码
2) 响应报文格式说明
12.3.3 HTTP编程
12.3.3.1 HTTP服务端
12.3.3.2 HTTP客户端
目录 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
分享到:
收藏