主题
Go 后端知识地图
语言、并发、运行时、工程化与后端系统。共 115 篇正文。
章节目录
- Go 函数:看清参数何时传入,代码何时执行
- Go 包与可见性:让依赖关系能被编译器检查
- Go 反射 unsafe cgo 与代码生成
- Go 接口
- Go 标准库必熟:从一件具体工作找到入口
- Go 泛型:同一套算法,怎样保留不同的具体类型
- Go 类型系统
- Go 结构体与方法
- Go 迭代器:把“怎样取下一个”留给集合
- Go 错误处理:保留原因,让调用者知道下一步怎么做
- Channel:把数据交出去,也把结束方式说清楚
- context:让一条调用链共用退出信号和时间预算
- Go 内存模型:怎样证明另一个 goroutine 能看见你的写入
- Go 并发工具选型:errgroup、singleflight、semaphore 各管哪一段
- Go 并发常见坑:用四个小反例找到真正的失误
- Go 并发模式:把任务分开以后,怎样一起收尾
- Goroutine:启动以后,怎样让它按时结束
- sync 包:从保护一组状态,到等一批任务结束
- Go defer、select、timer 与 netpoller:调用结束了,等待怎样结束
- Go 内存分配:一次申请怎样变成可用空间
- Go 垃圾回收:先看活着的对象,再谈调参
- Go 数据结构实现:值复制了,底下的数据复制了吗
- 什么是 GMP:goroutine 怎样得到执行机会
- 逃逸分析:为什么同一个指针,有时不分配堆内存
- Go 代码质量:格式、静态检查、测试和审查各管一段
- Go 依赖注入:谁创建对象,谁把依赖交给它,谁负责收尾
- Go 工程工具选型:沿着一个项目的重复劳动逐个选择
- Go 构建与发布:从一个二进制追到它的源码、参数和验证结果
- Go 模块管理:弄清这次构建到底用了哪份代码
- Go 测试:让一次失败告诉你该改哪里
- Go 结构化日志:让一次事件能查到,也别把秘密写进去
- Go 配置管理:启动前,把来源、类型和错误处理清楚
- Go 项目结构:让目录边界和依赖方向说同一件事
- 设计原则:用 Go 守住业务规则,再决定需要多少抽象
- Linux:从一个故障问题出发,选命令、读指标、写可控脚本
- 操作系统:把“程序在等什么”和“资源归谁”讲清楚
- 数据结构与算法:从操作需求出发,理解每一种结构为什么存在
- 计算机网络:沿着一次请求,把协议各自负责的事分清
- Go HTTP 中间件:包住 Handler,也要守住响应边界
- Go Web 与 RPC 工具选型:先分清它们替你承担哪一层
- Go 请求处理:把不可信输入变成明确结果
- net/http:把一个请求从接收到收尾讲清楚
- RESTful 设计:让调用方知道一次请求究竟做了什么
- RPC 与 gRPC:像调用函数一样使用,也要按网络请求处理
- WebSocket、GraphQL 与 Webhook:三种不同的问题,三条不同的链路
- Go 数据库工具选型
- Go 数据访问:管好连接、事务和 SQL 边界
- MySQL:沿着一次提交,认识 InnoDB、日志与复制
- NoSQL 与专用存储
- PostgreSQL:把版本清理、JSONB 与索引选对
- SQL 基础:先确定一行代表什么,再写查询
- 数据库事务:让一组修改成立,也让并发判断成立
- 数据库扩展性:先找瓶颈,再增加分布式边界
- 数据库索引:从少读哪些数据,理解一条查询为什么快
- Go 缓存工具选型
- Redis 原理
- Redis 数据结构
- Redis 缓存进阶
- 缓存三大问题
- 缓存模式
- Go 消息与工作流工具选型:先选需要哪一层,再检查确认和重试
- Kafka:从分区日志理解复制、吞吐、Rebalance 与事务
- 消息队列其他选型:从路由、重放和业务交接来选择
- 消息队列可靠性:把每一个故障窗口处理清楚
- 消息队列应用模式:从一次订单提交走到可靠的异步处理
- 消息队列核心概念:一条消息由谁保管,处理进度记在哪里
- Go 微服务治理工具选型:先分层,再比较同一层的代价
- 共识算法:主节点换了,已经答应的事不能反悔
- 分布式事务:两边不能一起提交时,怎样把账做完整
- 分布式基础组件:锁、ID、任务和会话都要面对“旧请求还活着”
- 分布式理论基础:先说清“什么结果算对”
- 微服务拆分方法:先把边界分清,再决定要不要跨网络
- 数据分布:决定数据放哪里,也决定以后怎么搬
- 服务治理:让请求找到合适的实例,并在变化时有序退出
- Go 稳定性与压测工具选型:先选保护边界,再选测量方式
- 发布安全:新版本能接班,旧版本也要能退场
- 可靠性度量:先写清分母,再谈几个 9
- 容灾:副本能接班,备份能回到过去,恢复还需要演练
- 容量与弹性:先量出可用容量,再讨论扩多少实例
- 幂等设计:超时以后,怎样安全地再试一次
- 稳定性手段:让慢依赖和突发流量止步于有限资源
- 高并发手段:减少重复工作,并给共享资源设上限
- Go 安全工具选型:先分清库、扫描器和密钥服务
- 供应链与运行时安全:从依赖来源追到线上进程
- 密码学应用:先决定要保护什么,再选算法
- 常见安全漏洞:沿着输入找到危险操作
- 授权:把“谁能对哪份数据做什么”写成可检查的规则
- 接口安全:让每一道检查都有明确的边界
- 认证:从“登录成功”到每次请求都认对人
- Go 可观测性工具选型:先分清谁采集、谁保存、谁帮你定位问题
- OpenTelemetry:让 Go 服务产生、传播并交付遥测数据
- 可观测性三大支柱:从“服务变慢了”找到下一条证据
- 告警设计:让每一次叫醒都指向一件值得做的事
- 持续剖析:把一次性能排查,变成能回看时间和版本的证据
- 故障复盘:把当时发生的事,变成可以验证的改进
- Go trace:把“请求在等什么”放回时间线上
- Go 典型故障排查:从八种症状找到下一份证据
- Go 基准测试:让“更快了”有可以复核的含义
- Go 常见优化点:把成本降下来,也把语义保住
- Go 性能诊断工具选型:六个工具,六种不同的问题
- Go 调试:断点看状态,GODEBUG 看运行时,core 留住现场
- pprof:先选对“在量什么”,再找热点
- Go CI-CD 与 GitOps
- Go 云原生工具选型
- Go 在容器中
- Kubernetes
- 后端云服务
- 基础设施即代码
- 容器与 Docker
- 网关与代理
- Go 源码阅读方法
- 架构演进:每拆开一个边界,都要重新回答谁负责提交和恢复
- 系统容量估算:把请求、字节和等待时间算到同一张账上
- 系统设计方法论:把需求一步步变成能验证的方案
- 系统设计经典题目:十二种系统,十二组必须守住的约束