Go 学习目录
这个页面把站内比较成体系的 Go 文章都整理到了一起。现在主要有两条线:一条是从语言基础一路写到项目落地的 Golang 从入门到放弃,另一条是偏常用生态和工程实践的 Go mod 好菜系列。
如果你是第一次系统学 Go,建议优先从第一套顺着读;如果你已经会一些基础语法,只是想快速补常用库,也可以直接跳到第二套。
系列一:Golang 从入门到放弃
按学习顺序排好,从环境、语法、并发、Web、数据库、部署,一直到迷你博客 API 实战收尾。
- 0x00 · Golang 从入门到放弃 -0x00系列开篇,聊为什么学 Go、Go 适不适合你,以及这套教程会用什么方式带你往下走。
- 0x01 · Golang 从入门到放弃 -0x01Windows、WSL2、macOS、Ubuntu 下安装 Go,并验证环境是否配置成功。
- 0x02 · Golang 从入门到放弃 -0x02安装 VSCode 和 Go 插件,配置 GOPROXY,跑通第一个 Go 工程。
- 0x03 · Golang 从入门到放弃 -0x03用 VSCode 调试第一个 Hello World,认识断点、单步、Watch 和调试流程。
- 0x04 · Golang 从入门到放弃 -0x04Go 基础语法入门:变量、常量、类型、运算符、条件判断与循环。
- 0x05 · Golang 从入门到放弃 -0x05函数、多返回值、具名返回值、defer,以及 Go 里最基础的错误处理方式。
- 0x06 · Golang 从入门到放弃 -0x06理解指针、传值和传址,搞清 Go 指针和 C 指针的区别与边界。
- 0x07 · Golang 从入门到放弃 -0x07数组、切片、map 的常见写法,以及切片共享底层数组这类高频坑。
- 0x08 · Golang 从入门到放弃 -0x08struct、嵌套结构体、匿名结构体和 tag,开始学会组织业务数据。
- 0x09 · Golang 从入门到放弃 -0x09方法、值接收者、指针接收者、接口、类型断言与 any 的基本用法。
- 0x0A · Golang 从入门到放弃 -0x0Apackage、module、go mod 和项目结构基础,开始把代码从单文件拆开。
- 0x0B · Golang 从入门到放弃 -0x0BJSON 编解码、文件读写与配置读取,把基础能力串到一起用。
- 0x0C · Golang 从入门到放弃 -0x0Cgoroutine、闭包循环变量坑和 WaitGroup,建立并发编程的第一层直觉。
- 0x0D · Golang 从入门到放弃 -0x0Dchannel、close、range、select 和超时控制,补齐 Go 并发通信模型。
- 0x0E · Golang 从入门到放弃 -0x0E用 net/http 写最小 Web 服务,处理参数、返回 JSON,并组织基本路由。
- 0x0F · Golang 从入门到放弃 -0x0Fdatabase/sql 入门:连接数据库、CRUD、事务,以及连接池的基本认知。
- 0x10 · Golang 从入门到放弃 -0x10Go 测试基础、表驱动测试和 benchmark,让代码不再全靠信仰。
- 0x11 · Golang 从入门到放弃 -0x11配置、环境变量与日志的组织方式,开始让服务更像一个正经工程。
- 0x12 · Golang 从入门到放弃 -0x12错误包装、errors.Is/As 和自定义错误类型,把 error 真正用得像样。
- 0x13 · Golang 从入门到放弃 -0x13panic 与 recover 的适用边界,以及在服务入口做异常兜底的思路。
- 0x14 · Golang 从入门到放弃 -0x14context 的取消、超时、链路传递和常见误用,理解现代 Go 服务的基础约定。
- 0x15 · Golang 从入门到放弃 -0x15Web 中间件、handler/service/repository 分层,以及接口代码怎么写得不乱。
- 0x16 · Golang 从入门到放弃 -0x16编译交付、交叉编译、Docker 打包与部署前排查清单。
- 0x17 · Golang 从入门到放弃 -0x17Redis 与缓存基础:缓存解决什么问题、常见策略和几个高频坑。
- 0x18 · Golang 从入门到放弃 -0x18登录鉴权与 JWT:认证、鉴权、中间件和 token 使用边界。
- 0x19 · Golang 从入门到放弃 -0x19优雅关闭与服务生命周期:信号处理、Shutdown 和收尾动作。
- 0x1A · Golang 从入门到放弃 -0x1A性能分析与 pprof:先找证据,再定位 CPU、内存和等待热点。
- 0x1B · Golang 从入门到放弃 -0x1B从需求拆分到目录结构,讲一个小 Go 服务到底该怎么落地起步。
- 0x1C · Golang 从入门到放弃 -0x1C用一个迷你博客 API 串起整套知识,把零散知识点收束成完整开发链路。
系列二:Go mod 好菜系列
偏常用模块和工程实践,重点聊这些库是干什么的、为什么常见、适合放在项目哪一层,以及最容易踩的坑。
- 0x00 · Go mod 好菜系列 - 0x00 先开个菜单新系列开篇,先聊为什么常见 Go 模块值得单独学,以及 gin、gorm、go-redis、zap、viper、cobra 各自负责什么。
- 0x01 · Go mod 好菜系列 - 0x01 Gin 真的是第一口常见菜详细聊 gin 是什么、适合干什么、路由/中间件/参数绑定/响应处理怎么写,以及为什么它在 Go Web 项目里这么常见。
- 0x02 · Go mod 好菜系列 - 0x02 Gorm 这盘 ORM 到底怎么吃详细拆 gorm 的定位、模型定义、迁移、CRUD、查询链、关联和事务,看看它为什么常见、又为什么经常引发争议。
- 0x03 · Go mod 好菜系列 - 0x03 go-redis 不是只有 set/get从缓存思路讲到 go-redis 的常见 API、过期控制、计数器和项目里最常见的使用方式,避免只会机械 set/get。
- 0x04 · Go mod 好菜系列 - 0x04 zap 让日志终于像日志详细讲 zap 为什么在 Go 项目里很常见、结构化日志怎么写、字段日志有什么价值,以及它通常应该放在哪一层。
- 0x05 · Go mod 好菜系列 - 0x05 viper 把配置从代码里请出去从配置文件、环境变量、默认值和热更新角度详细讲 viper,看看它怎么帮你把项目配置真正组织起来。
- 0x06 · Go mod 好菜系列 - 0x06 cobra 把命令行项目做得像样一点详细讲 cobra 能做什么、为什么 Go CLI 项目常用它、命令树/flags/执行入口如何组织,以及它在工程里的位置。
- 0x07 · Go mod 好菜系列 - 0x07 validator 别再手搓参数校验了详细讲 validator 在 Go 项目里为什么高频、标签校验怎么写、适合放在请求层还是业务层,以及什么时候别迷信自动校验。
- 0x08 · Go mod 好菜系列 - 0x08 jwt 这张票该怎么发和怎么验更模块化地聊 jwt:签发、校验、claims、过期、刷新和中间件实践,看看它为什么高频,又为什么不能被神化。
- 0x09 · Go mod 好菜系列 - 0x09 sqlx 夹在原生 SQL 和 ORM 之间的那口菜详细讲 sqlx 为什么受欢迎、比 database/sql 多了什么、比 ORM 少了什么,以及它为什么适合想手写 SQL 但又不想太原始的人。
- 0x0A · Go mod 好菜系列 - 0x0A ent 不是 ORM,它更像一套数据层工程化方案从 schema、代码生成、类型安全、迁移和查询表达力角度详细聊 ent,看看它为什么让一些团队很上头,也为什么它不算轻菜。
- 0x0B · Go mod 好菜系列 - 0x0B wire 这口依赖注入别硬吞详细聊 wire 是来解决什么的、为什么 Go 项目会谈依赖注入、它适合什么规模,以及什么时候完全没必要把项目搞成装配迷宫。
- 0x0C · Go mod 好菜系列 - 0x0C fx 这锅生命周期和装配更重一点从模块化、生命周期、依赖装配和项目体量角度详细聊 fx,看看它为什么适合更重一点的服务项目,又为什么不该滥用。
- 0x0D · Go mod 好菜系列 - 0x0D testify 这口断言和 mock 很下饭详细聊 testify 的 assert/require/mock 为什么这么高频、它适合替代哪些手写测试样板,以及怎么避免把测试写成断言堆砌。
- 0x0E · Go mod 好菜系列 - 0x0E swaggo 这盘接口文档别再靠手写了详细讲 swaggo 如何从注释生成 Swagger/OpenAPI 文档、它适合什么团队流程,以及怎样避免文档和代码一起失真。
- 0x0F · Go mod 好菜系列 - 0x0F prometheus/client_golang 这口指标菜该怎么摆上桌详细聊 Go 项目里的 Prometheus 指标:Counter/Gauge/Histogram 分别适合什么,以及为什么监控不只是“把接口次数打一打”。
- 0x10 · Go mod 好菜系列 - 0x10 casbin 这口权限模型别只会写 if role == admin详细讲 casbin 在权限控制里的位置、模型和策略怎么理解、RBAC 为什么常见,以及它怎么帮项目摆脱一地权限 if/else。
- 0x11 · Go mod 好菜系列 - 0x11 ginkgo/gomega 这口 BDD 测试风味更重详细讲 ginkgo/gomega 和 testify 的风格差异、BDD 测试为什么有人喜欢、它更适合哪些场景,以及什么时候它会显得过重。
- 0x12 · Go mod 好菜系列 - 0x12 air 这口热重载开发菜到底值不值详细聊 air 作为开发期热重载工具的价值、适合什么项目节奏、怎么配置,以及为什么它该只留在开发环境。
- 0x13 · Go mod 好菜系列 - 0x13 grpc 这锅服务间通信已经不是小炒了从协议、代码生成、服务定义、流式通信和适用场景角度详细聊 grpc,看看它为什么在微服务里常见,以及什么时候没必要上这么重。
- 0x14 · Go mod 好菜系列 - 0x14 kratos 这锅微服务脚手架不是只会搭架子详细聊 kratos 的定位、transport/service/data 分层怎么理解、它适合什么团队,以及为什么它更像工程约束工具而不只是生成目录的脚手架。
- 0x15 · Go mod 好菜系列 - 0x15 grpc-gateway 这盘协议翻译官到底该不该上桌详细聊 grpc-gateway 为什么常出现在 HTTP + gRPC 共存的项目里、它适合什么场景、注解路由怎么工作,以及它会带来哪些维护成本。
- 0x16 · Go mod 好菜系列 - 0x16 otel 这口链路追踪不是把日志换个颜色详细聊 OpenTelemetry 在 Go 项目里的位置、trace/span 到底在看什么、它和日志与 metrics 的关系,以及接入时最容易踩的几类坑。
- 0x17 · Go mod 好菜系列 - 0x17 kafka-go 这口异步队列菜别只会丢消息详细聊 kafka-go 在 Go 项目里的常见用法、生产者和消费者各自要关注什么、它适合哪些异步场景,以及为什么“能发能收”离可用还差很远。
- 0x18 · Go mod 好菜系列 - 0x18 minio-go 这盘对象存储别拿它当大号附件夹详细聊 minio-go 在文件上传和对象存储场景里的常见玩法、预签名 URL 为什么高频、bucket/object 的基本心智,以及接入时容易忽略的权限与生命周期问题。
- 0x19 · Go mod 好菜系列 - 0x19 consul 这锅服务发现不是配个地址本就完事详细聊 consul 在服务发现和配置场景里的定位、注册发现到底解决什么问题、健康检查为什么关键,以及它适合哪些规模的服务系统。
- 0x1A · Go mod 好菜系列 - 0x1A etcd/clientv3 这口分布式协调菜别只会 put 和 get详细聊 etcd/clientv3 在配置、选主、租约和分布式协调里的常见用法,为什么 watch 与 lease 很关键,以及它和普通 KV 存储不是一回事。
- 0x1B · Go mod 好菜系列 - 0x1B asynq 这盘后台任务菜比你手搓 goroutine 稳多了详细聊 asynq 在后台任务、重试、延迟执行和任务管理里的定位,为什么它比手搓 goroutine 更适合生产,以及它适合哪些异步业务。
- 0x1C · Go mod 好菜系列 - 0x1C temporal 这锅工作流不是把 if else 搬到云上详细聊 Temporal 在长流程编排、重试、补偿和状态持久化里的价值,为什么它和普通任务队列不是一个层级,以及什么场景值得上工作流。
- 0x1D · Go mod 好菜系列 - 0x1D meilisearch-go 这盘搜索菜不一定非得上大铁锅详细聊 meilisearch-go 在站内搜索和轻量全文检索场景里的定位、它和数据库模糊查询的差别,以及什么时候没必要一上来就冲 Elasticsearch。