目录




第1章编程的前世今生

1.1编程语言发展史

1.2编程语言时间轴

1.3Go语言发展史

1.3.1Go语言是如何诞生的

1.3.2Go语言的早期团队和演进历程

1.3.3Go语言正式发布并开源

1.4Go语言特点

1.4.1编译型语言和解释型语言

1.4.2Go语言为并发而生

1.4.3Go语言设计理念

1.4.4使用Go语言的项目

1.5学好Go语言的建议

第2章环境搭建(8min)

2.1在Windows系统下搭建Go开发环境

2.1.1SDK简介

2.1.2下载SDK工具包

2.1.3配置Go环境变量

2.1.4检查Go语言环境是否安装成功

2.2Linux系统下搭建Go语言开发环境

2.2.1Linux系统下安装SDK

2.2.2配置Go环境变量

2.3macOS系统下搭建Go语言开发环境

2.4Go语言的开发工具介绍

2.4.1工具介绍

2.4.2工具选择

2.4.3VS Code的安装和使用

2.4.4GoLand的安装和使用

2.5运行第1个程序

2.5.1Go代码结构介绍

2.5.2GoLand中运行Go文件

2.5.3命令行运行Go文件

第3章变量与基本数据类型(46min)

3.1什么是变量

3.2变量的声明、初始化和赋值

3.3常量

3.4局部变量和全局变量

3.5变量可见性

3.6注释

3.6.1注释的格式

3.6.2包注释

3.6.3命令注释

3.6.4变量注释

3.7规范的代码风格

3.8数据类型的基本介绍

3.8.1数字类型

3.8.2浮点数类型

3.8.3字符串类型

3.8.4布尔类型

3.8.5字符类型

3.9扩展——字符编码

3.9.1ASCII第1个编码集合的诞生及发展

3.9.2GBK编码的诞生及发展

3.9.3Unicode编码的诞生

3.9.4UTF系列编码的诞生及发展

3.9.5扩展——乱码之王锟斤拷

3.10基本数据类型的默认值

3.11类型转换

3.11.1显式类型转换

3.11.2隐式类型转换

3.11.3strconv包

3.12输入函数

3.12.1Scanf函数

3.12.2Scanln函数

3.12.3Scan函数

第4章运算符(3min)

4.1运算符基本介绍

4.2赋值运算符

4.3算术运算符

4.4关系运算符

4.5逻辑运算符

4.6位运算符

4.6.1按位与

4.6.2按位或

4.6.3按位异或

4.6.4按位左移

4.6.5按位右移

4.7运算符的优先级

第5章流程控制(26min)

5.1条件判断

5.1.1if单分支

5.1.2ifelse双分支

5.1.3ifelseif多分支

5.1.4if嵌套

5.1.5知识扩展——卫语句

5.2switch语句

5.3循环语句

5.3.1标准for循环

5.3.2while模式的for循环

5.3.3dowhile模式的for循环

5.3.4for range模式的for循环

5.3.5break语句

5.3.6continue语句

5.3.7多重循环

第6章数组、切片、Map(27min)

6.1数组

6.1.1声明数组

6.1.2初始化数组

6.1.3数组索引

6.1.4修改数组元素

6.1.5遍历数组

6.2切片

6.2.1什么是切片

6.2.2切片的创建和初始化

6.2.3nil和空切片

6.2.4为切片中的元素赋值

6.2.5通过切片创建新的切片

6.2.6遍历切片

6.2.7append()函数

6.2.8切片的底层原理

6.3map

6.3.1map的声明与初始化

6.3.2map的增、删、改、查

6.3.3map的底层实现

第7章函数与指针(50min)

7.1函数

7.1.1函数定义

7.1.2函数参数

7.1.3函数返回值

7.1.4匿名函数

7.1.5函数可作为参数

7.1.6函数可作为返回值

7.1.7函数作为变量

7.2特殊的函数

7.2.1main()函数

7.2.2init()函数

7.2.3defer()函数

7.2.4递归函数

7.3指针

7.3.1指针地址和指针类型

7.3.2指针取值

7.3.3空指针

7.3.4new

7.3.5make

第8章结构体与自定义数据类型(29min)

8.1结构体

8.1.1结构体定义

8.1.2结构体实例化

8.1.3结构体方法

8.1.4结构体匿名字段

8.1.5嵌套结构体

8.1.6结构体的“继承”

8.1.7结构体标签

8.1.8结构体内存布局

8.2自定义数据类型与类型别名

8.2.1自定义类型

8.2.2自定义类型方法

8.2.3类型别名

8.2.4自定义类型和类型别名的区别

第9章接口(16min)

9.1Go接口interface

9.1.1接口的定义

9.1.2接口的实现

9.1.3接口的使用

9.1.4接口嵌套

9.1.5类型断言

9.2空接口

第10章协程与Channel(27min)

10.1何为协程

10.1.1WaitGroup

10.1.2WaitGroup原理探析

10.2Channel信道

10.2.1Channel类型

10.2.2创建Channel

10.2.3操作Channel

10.2.4无缓冲的Channel

10.2.5有缓冲的Channel

10.2.6从Channel中循环取值

10.3select

10.3.1select特点

10.3.2带default的语句

10.3.3不带default的语句

10.3.4关闭Channel监听

10.3.5空的select将一直阻塞

10.3.6select定时器

10.4协程的设计与原理

10.4.1单进程时代

10.4.2多进程时代

10.4.3多线程时代

10.4.4协程时代

10.4.5协程的调度

10.4.6Go语言协程调度

第11章线程安全与异常处理(25min)

11.1线程为什么不安全

11.2如何解决线程安全问题

11.2.1互斥锁

11.2.2读写锁

11.2.3一次性锁

11.2.4sync.Pool

11.3线程安全sync.Map

11.3.1sync.Map基本用法

11.3.2sync.Map为什么快

11.4异常处理

11.4.1自定义错误

11.4.2错误的处理方式

第12章泛型(7min)

12.1泛型函数

12.1.1泛型约束

12.1.2指定底层类型

12.1.3可比较类型

12.1.4多参数泛型

12.1.5泛型嵌套

12.1.6常用泛型函数

12.2泛型结构体

12.3泛型切片

12.4泛型map

12.5泛型Channel

第13章文件操作(53min)

13.1相对路径与绝对路径

13.2文件读取

13.2.1一次性读取

13.2.2分片读取

13.2.3按行读取

13.3文件写入

13.3.1一次性写入

13.3.2逐行写入

13.3.3使用缓冲写入

13.3.4os.OpenFile()函数

13.4目录操作

13.4.1创建目录

13.4.2读取目录

13.4.3遍历目录

13.4.4目录的其他操作

13.5JSON文件操作

13.5.1JSON序列化

13.5.2JSON反序列化

13.6I/O接口

13.6.1io.Reader接口

13.6.2io.Writer接口

13.6.3io.Closer接口

13.6.4统一的抽象层

13.6.5最小接口原则

13.7命令行参数

13.7.1什么是命令行参数

13.7.2使用os.Args获取命令行参数

13.7.3使用flag包解析命令行参数

第14章单元测试与包管理

14.1最简单的测试

14.2单元测试的基本规范

14.3单元测试的常用方法

14.3.1表驱动测试

14.3.2随机执行

14.3.3子测试

14.3.4TestMain()函数

14.4基准测试

14.5包管理

14.5.1Go包的概念

14.5.2包的导入与可见性

14.5.3Go依赖管理的概念

14.5.4go mod的使用

第15章反射(13min)

15.1反射的优点与缺点

15.2reflect包

15.2.1type Type 类型

15.2.2type Kind类型

15.2.3TypeOf常用方法

15.2.4ValueOf常用方法

第16章网络编程(8min)

16.1HTTP编程

16.1.1HTTP服务器端

16.1.2HTTP客户端

16.2HTTP协议

16.2.1HTTP协议的发展历程

16.2.2HTTP协议会话方式

16.2.3请求报文

16.2.4响应报文

16.3TCP编程

16.3.1标准收发模式

16.3.2聊天收发模式

16.4TCP协议

16.4.1OSI七层模型

16.4.2TCP报文

16.4.3三次握手

16.4.4四次挥手

16.5UDP编程

16.5.1UDP优势

16.5.2UDP服务器端

16.5.3UDP客户端

16.5.4UDP应用场景

第17章部署(13min)

17.1打包命令

17.2交叉编译

17.3文件嵌入

17.3.1嵌入单个文件

17.3.2嵌入多个文件

17.3.3嵌入目录

第18章正则表达式

18.1正则表达式概述

18.2正则表达式基本语法

18.2.1字符集合

18.2.2字符范围

18.2.3数量字符

18.2.4元字符

18.2.5特殊字符

18.2.6位置匹配

18.2.7分组

18.2.8修饰符

18.3Go语言中使用正则表达式

18.3.1字符串匹配

18.3.2分组匹配

18.3.3分组替换

18.3.4标志

18.4常用正则表达式

第19章标准库和常用第三方库(43min)

19.1Go标准库

19.1.1时间和日期

19.1.2数学

19.1.3日志

19.1.4上下文

19.2Go常用第三方库

19.2.1logrus日志库

19.2.2gin

19.2.3定时任务