内容简介

前言

第1篇 基础知识

第1章 走进Go语言的世界

1.1 初识Go语言

1.1.1 Go语言的诞生

1.1.2 Go语言的特性

1.1.3 Go语言的使用

1.2 部署Go语言的开发环境

1.2.1 Go语言的环境变量

1.2.2 在Windows上安装Go语言环境

1.2.3 在Linux上安装Go语言环境

1.2.4 在Mac OS上安装Go语言环境

1.3 Go语言开发工具的使用

1.3.1 LiteIDE

1.3.2 Gogland

1.3.3 Visual Studio Code

1.4 Go语言的目录结构

1.4.1 GOROOT结构

1.4.2 GOPATH结构

1.5 第一个Go语言程序

1.6 就业面试技巧与解析

1.6.1 面试技巧与解析(一)

1.6.2 面试技巧与解析(二)

第2章 Go语言程序元素的构成

2.1 词法单元

2.1.1 标识符

2.1.2 关键字

2.1.3 字面量

2.1.4 分隔符

2.1.5 运算符

2.1.6 注释

2.2 常量

2.2.1 常量的定义

2.2.2 常量的声明

2.2.3 转义字符

2.2.4 赋值

2.2.5 枚举

2.3 变量

2.3.1 变量的声明

2.3.2 初始化变量

2.3.3 多个变量同时赋值

2.3.4 匿名变量

2.3.5 变量的作用域

2.4 就业面试技巧与解析

2.4.1 面试技巧与解析(一)

2.4.2 面试技巧与解析(二)

第3章 基本数据类型

3.1 整型

3.1.1 整型的类型与声明

3.1.2 整型的运算

3.2 浮点型

3.3 字符与字符串

3.3.1 字符串的表示

3.3.2 操作字符串

3.3.3 字符串格式化

3.4 布尔型

3.4.1 布尔型的表示

3.4.2 布尔型的运算

3.5 数据类型的转换

3.6 指针

3.6.1 指针地址和指针类型

3.6.2 指针的创建

3.6.3 从指针获取指向指针的值

3.6.4 使用指针修改值

3.7 类型别名

3.7.1 类型别名与类型定义

3.7.2 非本地类型不能定义方法

3.7.3 在结构体成员嵌入时使用别名

3.8 就业面试技巧与解析

3.8.1 面试技巧与解析(一)

3.8.2 面试技巧与解析(二)

第4章 流程控制

4.1 条件判断

4.1.1 if语句

4.1.2 if-else语句

4.1.3 else-if语句

4.1.4 使用if语句的注意事项

4.2 选择结构

4.2.1 switch语句

4.2.2 select语句

4.3 循环结构

4.3.1 for语句

4.3.2 range语句

4.4 defer语句

4.5 标签

4.5.1 break语句

4.5.2 continue语句

4.5.3 goto语句

4.6 就业面试技巧与解析

4.6.1 面试技巧与解析(一)

4.6.2 面试技巧与解析(二)

第2篇 核心应用

第5章 复合数据类型

5.1 数组

5.1.1 数组的声明

5.1.2 数组的初始化

5.1.3 数组的遍历

5.1.4 多维数组

5.2 切片

5.2.1 创建切片

5.2.2 使用append()函数添加元素

5.2.3 切片的复制

5.2.4 切片的删除

5.3 映射

5.3.1 创建映射

5.3.2 映射的遍历

5.3.3 map元素的删除和清空

5.4 列表

5.4.1 初始化列表

5.4.2 在列表中插入元素

5.4.3 从列表中删除元素

5.4.4 列表的遍历

5.5 就业面试技巧与解析

5.5.1 面试技巧与解析(一)

5.5.2 面试技巧与解析(二)

第6章 Go语言函数

6.1 认识函数

6.1.1 函数的声明

6.1.2 函数的调用

6.1.3 函数的参数

6.1.4 函数的返回值

6.2 函数类型和匿名函数

6.2.1 函数类型

6.2.2 匿名函数

6.3 函数类型实现接口

6.3.1 结构体实现接口

6.3.2 函数体实现接口

6.4 defer

6.4.1 defer的用途

6.4.2 执行顺序

6.5 闭包

6.5.1 什么是闭包

6.5.2 在闭包内部修改引用的变量

6.6 宕机与宕机恢复

6.6.1 宕机(panic)

6.6.2 宕机恢复(recover)

6.7 错误与处理

6.7.1 错误接口

6.7.2 自定义错误

6.7.3 错误和异常

6.8 就业面试技巧与解析

6.8.1 面试技巧与解析(一)

6.8.2 面试技巧与解析(二)

第7章 结构体与方法

7.1 结构体

7.1.1 结构体的定义

7.1.2 创建结构体

7.1.3 结构体的使用

7.1.4 成员变量的初始化

7.1.5 匿名字段和内嵌结构体

7.2 类型系统

7.2.1 命名类型和未命名类型

7.2.2 自定义类型

7.2.3 类型的强制转换

7.3 方法

7.3.1 方法的声明

7.3.2 为结构体添加方法

7.3.3 为类型添加方法

7.3.4 工厂方法创建结构体

7.3.5 基于指针对象的方法

7.3.6 方法值和方法表达式

7.3.7 嵌入类型的方法和继承

7.4 就业面试技巧与解析

7.4.1 面试技巧与解析(一)

7.4.2 面试技巧与解析(二)

第3篇 高级应用

第8章 Go语言接口的实现

8.1 认识接口

8.1.1 接口的声明

8.1.2 接口初始化

8.1.3 接口的方法调用

8.2 接口的运算

8.2.1 类型断言

8.2.2 类型查询

8.2.3 接口的使用形式和优点

8.3 类型与接口

8.3.1 接口类型

8.3.2 类型与接口之间的关系

8.4 空接口

8.4.1 什么是空接口

8.4.2 空接口和nil

8.4.3 空接口的使用

8.5 接口的内部实现

8.5.1 数据结构

8.5.2 接口的调用过程

8.5.3 空接口的数据结构

8.6 就业面试技巧与解析

8.6.1 面试技巧与解析(一)

8.6.2 面试技巧与解析(二)

第9章 Go语言的并发

9.1 并发基础

9.1.1 并发与并行

9.1.2 指定使用核心数

9.1.3 并发与并行的区别

9.2 goroutine

9.2.1 什么是goroutine

9.2.2 goroutine的创建

9.2.3 协程间的通信

9.3 通道

9.3.1 声明通道类型

9.3.2 创建通道

9.3.3 通道的作用

9.3.4 select

9.3.5 缓冲机制

9.3.6 通道的传递

9.3.7 单向通道

9.3.8 关闭通道

9.3.9 超时和计时器

9.4 并发的进阶

9.4.1 多核并行化

9.4.2 协程的同步

9.4.3 协程与恢复

9.4.4 生成器

9.4.5 并发模型

9.5 就业面试技巧与解析

9.5.1 面试技巧与解析(一)

9.5.2 面试技巧与解析(二)

第10章 反射机制

10.1 反射的类型对象

10.1.1 反射的类型(Type)与种类(Kind)

10.1.2 指针与指针指向的元素

10.1.3 使用反射获取结构体的成员类型

10.1.4 结构体标签

10.2 反射的值对象

10.2.1 使用反射值对象包装任意值

10.2.2 从反射值对象获取被包装的值

10.2.3 使用反射访问结构体的成员字段的值

10.2.4 反射对象的空和有效性判断

10.2.5 使用反射值对象修改变量的值

10.2.6 通过类型创建类型

10.2.7 使用反射调用函数

10.3 反射的规则

10.3.1 反射API

10.3.2 反射三定律

10.4 inject库

10.4.1 依赖注入和控制反转

10.4.2 inject

10.4.3 inject的原理分析

10.5 反射的优点和缺点

10.6 就业面试技巧与解析

10.6.1 面试技巧与解析(一)

10.6.2 面试技巧与解析(二)

第11章 包

11.1 包的概念

11.1.1 什么是包

11.1.2 包的结构

11.1.3 常用内置包

11.1.4 包的导入

11.1.5 包的使用

11.1.6 Go语言工具箱

11.2 包的工作目录(GOPATH)

11.2.1 如何查看GOPATH

11.2.2 GOPATH的工程结构

11.2.3 设置和使用GOPATH

11.2.4 在多项目工程中使用GOPATH

11.3 创建包

11.4 导出标识符

11.4.1 导出包内标识符

11.4.2 导出结构体及接口成员

11.5 自定义包

11.5.1 包的制作

11.5.2 特定平台的代码

11.5.3 godoc生成文档

11.5.4 包的打包与发布

11.5.5 自定义包的导入

11.6 sync包与锁

11.6.1 互斥锁

11.6.2 读写锁

11.7 就业面试技巧与解析

11.7.1 面试技巧与解析(一)

11.7.2 面试技巧与解析(二)

第4篇 项目实践

第12章 网络编程

12.1 Socket编程

12.1.1 什么是Socket

12.1.2 Dial()函数

12.1.3 TCP Socket

12.1.4 UDP Socket

12.2 HTTP编程

12.2.1 HTTP客户端

12.2.2 HTTP服务器端

12.3 数据库

12.3.1 database/sql接口

12.3.2 使用MySQL数据库

12.3.3 使用SQLite数据库

12.3.4 使用PostgreSQL数据库

12.3.5 NoSQL数据库操作

12.4 Cookie

12.4.1 设置Cookie

12.4.2 读取Cookie

12.5 就业面试技巧与解析

12.5.1 面试技巧与解析(一)

12.5.2 面试技巧与解析(二)

第13章 Go语言的文件处理

13.1 文件操作

13.1.1 创建文件与查看状态

13.1.2 重命名与移动

13.1.3 打开与关闭

13.1.4 删除与截断

13.1.5 读写文件

13.1.6 权限控制

13.1.7 文件链接

13.2 XML文件处理

13.2.1 解析XML

13.2.2 生成XML

13.2.3 XML文件的读写操作

13.3 JSON文件处理

13.3.1 解析JSON

13.3.2 生成JSON

13.3.3 JSON文件的读写操作

13.4 日志记录

13.4.1 Logrus

13.4.2 Seelog

13.5 压缩

13.5.1 打包与压缩

13.5.2 压缩与解压

13.6 就业面试技巧与解析

13.6.1 面试技巧与解析(一)

13.6.2 面试技巧与解析(二)

第14章 编译与工具

14.1 编译

14.1.1 go build无参数编译

14.1.2 go build+文件列表

14.1.3 go build+包

14.1.4 go build编译时的附加参数

14.2 编译后运行

14.3 编译并安装

14.4 清除编译文件

14.5 格式化代码文件

14.6 一键获取代码、编译并安装

14.6.1 远程包的路径格式

14.6.2 go get+远程包

14.6.3 go get使用时的附加参数

14.7 编译前自动化生成代码

14.8 测试

14.8.1 单元测试

14.8.2 基准测试

14.9 性能分析

14.9.1 安装图形化显示分析数据工具

14.9.2 安装第三方性能分析来分析代码包

14.9.3 性能分析

14.10 就业面试技巧与解析

14.10.1 面试技巧与解析(一)

14.10.2 面试技巧与解析(二)