《Let's Go》是一本面向初学者的 Go 语言 Web 开发实战教程。全书采用“边学边做”方式,手把手带领读者完成名为 Snippetbox 的完整 Web 应用(类似 Pastebin/Gist)。通过一次从 0 到上线的真实项目,读者不仅能掌握 Go 语法,更能学会如何构建 快速、安全、可维护 的生产级 Web 应用。
全书共 16 章 + 附录,分为 4 大篇章,层层递进:
| 篇章 | 覆盖章节 | 核心主题 | |---|---|---| | 基础篇 | 1–2 章 | 环境、路由、模板、静态文件 | | 进阶篇 | 3 章 | 配置、日志、依赖注入、错误处理 | | 数据篇 | 4 章 | MySQL 连接池、模型、事务、查询 | | 安全与测试篇 | 8–13 章 | HTTPS、认证、CSRF、会话、测试 |
真实业务场景
从“只能显示一句话”的雏形,逐步加入 CRUD、用户注册登录、HTTPS、安全加固,最终具备:
工程化思维
强调项目结构、代码复用、配置与日志分离、依赖注入、模板缓存、中间件链等生产要素,为后续扩展(CLI、微服务)奠定框架级基础。
渐进式重构
每章先给出“能跑”的实现,再拆分为可测试、可复用的包(pkg/models
、pkg/forms
),示范如何优雅地演进代码。
| 类别 | 选型 | 说明 |
|---|---|---|
| 语言 | Go 1.16+ | 语法简洁、并发原生化 |
| 路由 | bmizerany/pat
| RESTful 语义路由 |
| 模板 | html/template
| 原生模板继承、XSS 自动转义 |
| 数据库 | MySQL | database/sql
+ go-sql-driver/mysql
|
| 会话 | golangcollege/sessions
| 加密 Cookie 会话 |
| 安全 | 自签 TLS、bcrypt、nosurf | HTTPS、密码哈希、CSRF |
| 测试 | 标准 testing
包 | 表驱动测试、Mock、集成测试 |
pat.New().Get/Post
定义 RESTful 端点alice.New(recoverPanic, logRequest, secureHeaders, session.Enable, noSurf, authenticate)
application
结构体把 logger / db / session / templateCache / users
注入到所有 handlertemplateData
结构体传递动态数据,addDefaultData
自动注入公共字段(年份、登录状态、CSRF Token)SnippetModel
/ UserModel
封装 SQL,使用 ?
占位符防注入,事务保证原子性httptest
伪造请求/响应SnippetModel
/ UserModel
完成本书后,你将收获:
《Let's Go》以“做一个能跑、能上线、能扩展的 Snippetbox”为主线,把 Go Web 开发中的 路由、模板、数据库、安全、测试、部署 等关键环节串成一条清晰的知识链。它既是一本入门教程,也是一份可随时查阅的 生产级代码模板与最佳实践手册。