全部
17 分钟阅读
全部
# go
## 操作系统知识
### 堆 heap
### 栈 stack
- 栈帧
### 进程 process
### 线程
## 基础
### [语言规范](https://before80.github.io/go_docs/langSpec/)
- 标识符
- h
- hh
- y
- yy
- 关键字
- 函数
- 内置函数
### [Effictive Go](https://before80.github.io/go_docs/docs/UsingAndUnderstandingGo/EffectiveGo/)
## 高级
《打开Go语言之门——入门、实战与进阶》飞雪无情/著
# Go
## 第一部分 快速入门Go语言
### 第1章 基础入门:Hello,Go语言
### 第2章 数据类型:Go语言的基石
### 第3章 控制结构:if、for、switch那些事儿
### 第4章 集合类型:如何正确使用array、slice和map
### 第5章 函数和方法:如何区分函数和方法
### 第6章 struct和interface:隐式的接口实现
### 第7章 错误处理:如何更优雅地处理程序异常和错误
## 第二部分 Go语言的高校并发
### 第8章 goroutine和channel:并发的基础
### 第9章 同步原语:让您对并发控制得新应手
### 第10章 Context:多协程并发控制神器
### 第11章 并发模式:拿来即用的经验总结
### 第12章 并发技巧:高效并发安全的字节池
## 第三部分 深入理解Go语言
### 第13章 指针详解:什么情况下应该使用指针
### 第14章 参数传递:值、引用以及指针的区别
### 第15章 内存分配:new和make该如何选择
### 第16章 运行时反射:字符串和结构体之间如何转换
### 第17章 非类型安全:不安全但高效的unsafe
### 第18章 零拷贝:slice为何如此高效
### 第19章 实战:字符串如何高效拼接
## 第四部分 Go语言工程管理
### 第20章 测试:质量保证的基石
### 第21章 性能优化:如何写出高质量的代码
### 第22章 协作开发:模块化管理
## 第五部分 Go语言泛型
### 第23章 初始泛型:使用泛型简化编程
### 第24章 深入泛型:漫谈泛型设计
《Go语言核心编程》李文塔/著
# Go
## 第1章 基础知识
### 语言简介
### 初识Go程序
### Go词法单元
### 变量和常量
### 基本数据类型
### 复合数据类型
### 控制结构
## 第2章 函数
### 基本概念
### 函数签名和匿名函数
### defer
### 闭包
### panic和recover
### 错误处理
### 底层实现
## 第3章 类型系统
### 类型简介
### 类型方法
### 方法调用
### 组合和方法集
### 函数类型
## 第4章 接口
### 基本概念
### 接口运算
### 空接口
### 接口内部实现
## 第5章 并发
### 并发基础
### 并发范式
### context标准库
### 并发模式
## 第6章 反射
### 基本概念
### 反射规则
### inject库
### 反射的优缺点
## 第7章 语言陷阱
### 多值赋值和短变量声明
### range复用临时变量
### defer陷阱
### 切片困惑
### 值、指针和引用
### 习惯用法
## 第8章 工程管理
### 编程环境
### 命名空间和作用域
### 包的基本概念
### 第三方包管理
## 第9章 编程哲学
### Go语言设计哲学
### Go语言发展史
### 未来
《Go语言高级编程》柴树衫 曹春晖/著
# Go
## 第1章
### Go语言创世纪
### Hello,World的革命
### 数组、字符串和切片
### 函数、方法和切片
### 面向并发的内存模型
### 常见的并发模式
### 错误和异常
### 补充说明
## 第2章 CGO编程
### 快速入门
### CGO基础
### 类型转换
### 函数调用
### 内部机制
### 实战:封装qsort
### CGO内存模型
### C++类包装
### 静态库和动态库
### 编译和链接参数
## 第3章 Go汇编语言
### 快速入门
### 计算机结构
### 常量和全局变量
### 控制流
### 再论函数
### 汇编语言的威力
### 例子:Goroutine ID
### Delve 调试器
### 补充说明
## 第4章 RPC和Protobuf
### RPC入门
### Protobuf
### 玩转RPC
### gRPC入门
### gRPC进阶
### gRPC和Protobuf扩展
### pbgo:基于Protobuf的框架
### grpccurl工具
### 补充说明
## 第5章 Go和Web
### Web开发简介
### 请求路由
### 中间件
### 请求校验
### Database和数据库打交道
### 服务流量限制
### 常见大型Web项目分层
### 接口和表驱动开发
### 灰度分布和A/B测试
### 补充说明
## 第6章 分布式系统
### 分布式ID生成器
### 分布式锁
### 延时任务系统
### 分布式搜索引擎
### 负载均衡
### 分布式配置管理
### 分布式爬虫
### 补充说明
《企业级Go项目开发实战》孔令飞/著
# Go
## 第一部分 项目准备
### 第1章 Go开发环境准备
### 第2章 快速部署IAM系统
## 第二部分 项目设计
### 第3章 规范设计
### 第4章 目录结构设计
### 第5章 工作流设计
### 第6章 研发流程设计
### 第7章 如何优雅写出优雅的Go项目
### 第8章 Go语言设计模式
## 第三部分 项目管理
### 第9章 如何编写Makefile
### 第10章 IAM项目研发流程实战
### 第11章 静态代码检查
### 第12章 生成Swagger API文档
## 第四部分 项目开发
### 第13章 错误处理
- 错误码设计
- IAM项目错误码设计规范
- 错误包
- 一个错误码的具体实现
- 错误码实际使用示例
### 第14章 日志处理
- 如何设计日志包
- 如何记录日志
- 扩展内容:分布式日志解决方案
- 有哪些优秀的开源日志包
- 从零开始编写一个日志包
- IAM项目日志包设计实战
### 第15章 GORAM ORM应用
- GORAM基础知识
- 通过示例学习GORAM
- GORAM常用操作讲解
- iam-apiserver中的CURD操作
### 第16章 Web服务功能实现
- Web服务的核心功能
- Web框架为什么选择Gin
- Gin是如何支持Web服务的基础
- Gin是如何支持Web服务的高级功能的
### 第17章 IAM应用构建
- 如何构建应用框架
- 应用构建三剑客
- 构建应用的基础:应用的三大基本功能
- iam-apiserver是如何构建应用框架的
- App包的设计和实现
- IAM应用构建的优秀特性
- 构建应用的注意事项
### 第18章 IAM认证功能实现
- 认证与授权的区别
- 4种基本的认证方式
- 基于JWT的Token认证机制实现
- 如何设计IAM项目的认证功能
- IAM项目是如何实现Basic认证的
- IAM项目是如何实现Bearer认证的
- IAM项目认证功能设计技巧
### 第19章 IAM API服务构建
- RESTful API介绍
- RPC API介绍
- REST 与 gRPC
- iam-apiserver服务介绍
- iam-apiserver代码实现
- iam-apiserver服务核心功能
### 第20章 IAM Authz服务构建
- 权限基础知识介绍
- iam-authz-server的功能介绍
- iam-authz-server的代码实现
- iam-authz-server关键代码分析
### 第21章 IAM Pump服务构建
### 第22章 分布式作业系统设计与实现
### 第23章 IAM SDK设计与实现
### 第24章 IAM 客户端工具构建
## 第五部分 项目测试
### 第25章 代码测试
### 第26章 性能分析
### 第27章 API Server性能测试和调优
## 第六部分 项目部署
### 第28章 基于虚拟机部署IAM系统
### 第29章 IAM容器化部署
### 第30章 Helm应用部署
### 第31章 基于GitHub Actions的CI实战
《Go语言精进之路——从新手到高手的编程思想、方法和技巧》白明/著
# Go
## 第一部分 熟知Go语言的一切
### 第1条 了解Go语言的诞生与演进
- Go语言的诞生
- Go语言的早期团队和演进历程
- Go语言正式发布并开源
### 第2条 选择适当的Go语言版本
- Go语言的先祖
- Go语言的版本发布历史
- Go语言的版本选择建议
### 第3条 理解Go语言的设计哲学
- 追求简单,少即是多
- 偏好组合,正交解耦
- 原生并发,轻量高效
- 面向工程,自带电池
### 第4条 使用Go语言原生编程思维来写Go代码
- 语言与思维——来自大师的观点
- 现实中的投影
- Go语言原生编程思维
## 第二部分 项目结构、代码风格与标识符命名
### 第5条 使用得到公认且广泛使用的项目结构
- Go项目的项目结构
- Go语言典型项目结构
### 第6条 提交前使用gofmt格式化源码
- gofmt:Go语言在解决规模化问题上的最佳实践
- 使用gofmt
- 使用goimports
- 将gofmt/goimports与IDE或编辑器工具集成
### 第7条 使用Go命名惯例对标识符进行命名
- 简单且一致
- 利用上下文环境,让最短的名字携带足够的信息
## 第三部分 声明、类型、语句与控制结构
### 第8条 使用一致的变量声明形式
- 包级变量的声明形式
- 局部变量的声明形式
### 第9条 使用无类型变量简化代码
- Go常量溯源
- 有类型常量带来的烦恼
- 无类型常量消除烦恼,简化代码
### 第10条 使用iota实现枚举常量
### 第11条 尽量定义零值可用的类型
- Go类型的零值
- 零值可用
### 第12条 使用复合字面值作为初值构造器
- 结构体复合字面量
- 数组/切片复合字面量
- map复合字面量
### 第13条 了解切片实现原理并高效使用
- 切片究竟是什么
- 切片的高级特性:动态扩容
- 尽量使用cap参数创建切片
### 第14条 了解map实现原理并高效使用
- 什么是map
- map的基本操作
- map的内部实现
- 尽量使用cap参数创建map
### 第15条 了解string实现原理并高效使用
- Go语言的字符串类型
- 字符串的内部表示
- 字符串的高效构造
- 字符串相关的高效转换
### 第16条 理解Go语言的包导入
- Go程序构建过程
- 究竟是路径名还是包名
- 包名冲突问题
### 第17条 理解Go语言表达式的求值顺序
- 包级别变量声明语句中的表达式
- 普通求值顺序
- 赋值语句的求值
- switch/select语句中的表达式求值
### 第18条 理解Go语言代码块与作用域
- Go代码块与作用域简介
- if条件控制语句的代码块
- 其他控制语句的代码块规则简介
### 第19条 了解Go语言控制语句惯用法及使用注意事项
- 使用if控制语句时应遵循"快乐"
- for range 的避坑指南
- break跳到哪里去了
- 尽量用case表达式列表替代fallthrough
## 第四部分 函数与方法
### 第20条 在init函数中检查包级变量的初始状态
- 认识init函数
- 程序初始化顺序
- 使用init函数检查包级变量的初始状态
### 第21条 让自己习惯于函数是一等公民
- 什么是一等公民
- 函数作为一等公民的特殊运用
### 第22条 使用defer让函数更简洁、更健壮
- defer的运作机制
- defer的常见用法
- 关于defer的几个关键问题
### 第23条 理解方法的本质以选择正确的receiver类型
- 方法的本质
- 选择正确的receiver类型
- 基于对Go方法本质的理解巧解难题
### 第24条 方法集合决定接口实现
- 方法集合
- 类型嵌入与方法集合
- defined类型的方法集合
- 类型别名的方法集合
### 第25条 了解变长参数函数的妙用
- 什么是变长参数函数
- 模拟函数重载
- 模拟实现函数的可选参数与默认参数
- 实现功能选项模式
## 第五部分 接口
### 第26条 了解接口类型变量的内部表示
- nil error值 != nil
- 接口类型变量的内部表示
- 输出类型变量内部表示的详细信息
- 接口类型的装箱原理
### 第27条 尽量定义小接口
- Go推荐定义小接口
- 小接口的优势
- 定义小接口可以遵循的一些点
### 第28条 尽量避免使用空接口作为函数参数类型
### 第29条 使用接口作为程序水平组合的连接点
- 一切皆组合
- 垂直组合问题
- 以接口为连接点的水平组合
### 第30条 使用接口提高代码的可测试性
- 实现一个附加免责声明的电子邮件发送函数
- 使用接口来减低耦合
## 第六部分 并发编程
### 第31条 优先考虑并发设计
- 并发与并行
- Go并发设计实例
### 第32条 了解goroutine的调度原理
- goroutine调度器
- goroutine调度模型与演进历程
- 对goroutine调度器原理的进一步理解
- 调度器状态的查看方法
- goroutine调度实例简要分析
### 第33条 掌握Go并发模型和常见并发模式
- Go并发模型
- Go常见的并发模式
### 第34条 了解channel的妙用
- 无缓冲channel
- 带缓冲channel
- nil channel的妙用
- 与select结合使用的一些惯用法
### 第35条 了解sync包的正确用法
- sync包还是channel
- 使用sync包的注意事项
- 互斥锁还是读写锁
- 条件变量
- 使用sync.Once实现单例模式
- 使用sync.Pool减轻垃圾回收压力
### 第36条 使用atomic包实现伸缩性更好的并发读取
- atomic包对原子操作
- 对共享整型变量的无锁读写
- 对共享自定义类型变量的无锁读写
## 第七部分 错误处理
### 第37条 了解错误处理的4种策略
- 构造错误值
- 透明错误处理策略
- "哨兵"错误处理策略
- 错误值类型检视策略
- 错误行为特性检视策略
### 第38条 尽量优化反复出现的if err != nil
- 两种观点
- 尽量优化
- 优化思路
### 第39条 不要使用panic进行正常的错误处理
- Go的panic不是Java的checked exception
- panic的典型应用
- 理解panic的输出信息
## 第八部分 测试、性能剖析与调试
### 第40条 理解包内测试与包外测试的差别
- 官方文档的"自相矛盾"
- 包内测试与包外测试
### 第41条 有层次地组织测试代码
- 经典模式——平铺
- xUnit家族模式
- 测试固件
### 第42条 优先编写表驱动的测试
- Go测试代码的一般逻辑
- 表驱动的测试实践
- 表驱动测试的优点
- 表驱动测试实践中的注意事项
### 第43条 使用testdata管理测试依赖的外部数据文件
- testdata目录
- golden文件惯用法
### 第44条 正确运用fake、stub和mock等辅助单元测试
- fake:真实组件或服务的简化实现版替身
- stub:对返回结果有一定预设控制能力的替身
- mock:专用于行为观察和验证的替身
### 第45条 使用模糊测试让潜在bug无处遁形
- 模糊测试在挖掘Go代码的潜在bug中的作用
- go-fuzz的初步工作原理
- go-fuzz使用方法
- 使用go-fuzz建立模糊测试的示例
- 让模糊测试称为一等公民
### 第46条 为被测对象建立性能基准
- 性能基准测试在Go语言中是一等公民
- 顺序执行和并行执行的性能基准测试
- 使用性能基准比较工具
- 排除额外干扰,让基准测试更精确
### 第47条 使用pprof对程序进行性能剖析
- pprof的工作原理
- 使用pprof进行性能剖析的实例
### 第48条 使用expvar输出度量数据,辅助定位性能瓶颈点
- expvar包的工作原理
- 自定义应用通过expvar输出的度量数据
- 输出数据的展示
### 第49条 使用Delve调试Go代码
- 关于调试,您首先应该知道的几件事
- Go调试工具的选择
- Delve调试基础、原理与架构
- 并发、Coredump文件与挂接进程调试
## 第九部分 标准库、反射与cgo
### 第50条 理解Go TCP Socket网络编程模型
- TCP Socket网络编程模型
- TCP连接的建立
- Socket读写
- Socket属性
- 关闭连接
### 第51条 使用net/http包实现安全通信
- HTTPS:在安全传输层上运行的HTTP协议
- HTTPS安全传输层的工作机制
- 非对称加密和公钥证书
- 对服务端公钥证书的校验
- 对客户端公钥证书的校验
### 第52条 掌握字符集的原理和字符编码方案间的转换
- 字符与字符集
- Unicode字符集的诞生与UTF-8编码方案
- 字符编码方案间的转换
### 第53条 掌握使用time包的正确方式
- 时间的基础操作
- 时间的格式化输出
- 定时器的使用
### 第54条 不要忽视对系统信号的处理
- 为什么不能忽视对系统信号的处理
- Go语言对系统信号处理的支持
- 使用系统信号实现程序的优雅退出
### 第55条 使用crypto下的密码学包构建安全应用
- Go密码学包概览与设计原则
- 分组密码算法
- 公钥密码
- 单向散列函数
- 消息认证码
- 数字签名
- 随机数生成
### 第56条 掌握bytes包和strings包的基本操作
- 查找与替换
- 比较
- 分割
- 拼接
- 修剪与变换
- 快速对接I/O模型
### 第57条 理解标准库的读写模型
- 直接读写字节序列
- 直接读写抽象数据类型实例
- 通过包裹类型读写数据
### 第58条 掌握unsafe包的安全使用模式
- 简洁的unsafe包
- unsafe包的典型应用
- 正确理解unsafe.Pointer与uintptr
- unsafe.Pointer的安全使用模式
### 第59条 谨慎使用reflect包提供的反射能力
- Go反射的三大法则
- 反射世界的入口
- 反射世界的出口
- 输出参数、interface{}类型变量及反射对象的可设置性
### 第60条 了解cgo的原理和使用开销
- Go调用C代码的原理
- 在Go中使用C语言的类型
- 在Go中链接外部C库
- 在C中使用Go函数
- 使用cgo的开销
- 使用cgo代码的静态构建
## 第十部分 工具链与工程实践
### 第61条 使用module管理包依赖
- Go语言包管理演进回顾
- Go module:Go包依赖管理的生产标准
- Go module 代理
- 升级module的主版本号
### 第62条 构建最小Go程序容器镜像
- 镜像:继承中的创新
- 镜像是个筐:初学者的认知
- 理性回归:builder模式的崛起
- 像赛车那样减重:追求最小镜像
- 要有光:对多阶层构建的支持
### 第63条 自定义Go包的导入路径
- govanityurls
- 使用govanityurls
### 第64条 熟练掌握Go常用工具
- 获取与安装
- 包或module检视
- 构建
- 进行与诊断
- 格式化与静态代码检查
- 重构
- 查看文档
- 代码导航与洞察
### 第65条 使用go generate驱动代码生成
- go generate:Go原生的代码生成"驱动器"
- go generate的工作原理
- go generate的应用场景
### 第66条 牢记Go的常见陷阱
- 语法规范类
- 标准库类
《Go语言学习笔记》雨痕/著
# Go
## 上卷 语言详解
### 第1章 概述
- 特征
- 简介
### 第2章 类型
- 变量
- 命名
- 常量
- 基本类型
- 引用类型
- 类型转换
- 自定义类型
### 第3章 表达式
- 保留字
- 运算符
- 初始化
- 流控制
### 第4章 函数
- 定义
- 参数
- 返回值
- 匿名函数
- 延迟调用
- 错误处理
### 第5章 数据
- 字符串
- 数组
- 切片
- 字典
- 结构
### 第6章 方法
- 定义
- 匿名字段
- 方法集
- 表达式
### 第7章 接口
- 定义
- 执行控制
- 类型转换
- 技巧
### 第8章 并发
- 并发的含义
- 通道
- 同步
### 第9章 包结构
- 工作空间
- 导入包
- 组织结构
- 依赖管理
### 第10章 反射
- 类型
- 值
- 方法
- 构建
- 性能
### 第11章 测试
- 单元测试
- 性能测试
- 代码覆盖率
- 性能监控
### 第12章 工具链
- 安装
- 工具
- 编译
## 下卷 源码剖析
### 第13章 准备
### 第14章 引导
### 第15章 初始化
### 第16章 内存分配
- 概述
- 初始化
- 分配
- 回收
- 释放
- 其他
### 第17章 垃圾回收
- 概述
- 初始化
- 启动
- 标记
- 清理
- 监控
- 其他
## 第18章 并发调度
- 概述
- 初始化
- 任务
- 线程
- 执行
- 连续栈
- 系统调用
- 监控
- 其他
### 第19章 通道
- 创建
- 收发
- 选择
### 第20章 延迟
- 定义
- 性能
- 错误
### 第21章 析构
- 设置
- 清理
- 执行
### 第22章 缓冲池
- 初始化
- 操作
- 清理
《Go语言从入门到项目实战》刘瑜、萧文翰、董树南/著
# Go
## 第一部分 Go语言编程基础
### 第1章 Go语言入门知识
- Go语言简介
- Go语言开发工具的安装
- 第一个Go语言程序:Hello 三酷猫
- 安装和使用集成开发环境
- 关键字和保留字
- 为代码添加注释
- 练习与实验
### 第2章 基础语法
- 声明
- 常量与变量
- 基本数据类型
- 运算符及优先级
- 练习与实验
### 第3章 高级数据类型
- 指针类型
- 数组类型
- 切片类型
- 集合类型
- 结构体类型
- 练习与实验
### 第4章 流程控制语法
- 分支机构
- switch...case...分支结构
- 循环结构
- 跳转控制结构
- for-range结构
- 案例:三酷猫背九九乘法表
- 案例:三酷猫学算法之冒泡排序
- 练习与实验
### 第5章 函数
- 函数的声明
- 函数的调用
- 递归函数
- 闭包
- 函数的延迟调用
- Go语言的异常处理
- 案例:三酷猫的面积计算器
- 练习与实验
### 第6章 结构体
- 类型
- 结构体的基本使用
- 构造函数与方法
- 结构体的嵌套
- 案例:三酷猫开银行
- 练习与实验
### 第7章 接口
- 接口概述
- 接口的定义和使用
- 空接口的定义和使用
- 类型断言
- 练习与实验
### 第8章 包
- 包的声明与导入
- Go应用程序的启动流程
- 创建包
- Go语言中的常用内置包
- 案例:三酷猫的文件夹递归复制工具
- 案例:三酷猫的二维码图片生成器
- 练习与实验
### 第9章 并发、并行与协程
- 概念
- Go语言协程:Goroutine
- Go语言调度模型:GPM
- runtime包
- 在协程任务之间传递数据:Channel
- select结构
- 加锁和原子操作
- 定时器
- 案例:三酷猫筛选0~100范围内的素数
- 练习与实验
### 第10章 反射
- 使用反射访问变量
- 使用反射访问指针表示的变量
- 使用反射访问结构体
- 使用反射修改值
- 使用反射调用函数
- 使用反射创建变量
- 练习与实验
### 第11章 命令行工具
- 编译命令 go build
- 清理命令 go clean
- 运行命令 go run
- 代码格式化命令 gofmt
- 编译并安装命令 go install
- 获取包命令 go get
- 练习与实验
### 第12章 数据库操作
- MySQL
- Redis
- 练习与实验
## 第二部分 Go语言项目实战
### 第13章 开发矩阵计算库
- 线性代数基础与项目功能设计
- 项目初始化与鸭子类型
- 矩阵计算包matrix的开发
- 项目总结
### 第14章 STL文件解析和MongoDB存储
- STL文件简介与项目设计
- 开发utils包
- 开发用于模型文件处理的stl包
- 开发路由函数的handler包
- 开发项目入口文件main.go并测试项目
- 项目总结
### 第15章 开发文件加密和解密程序
- 实现思路及功能设计
- 加密和解密程序的设计与实现
- 开发加密、解密和散列值计算的可执行程序
- 项目总结