作者: | Alex Edwards |
语言: | 英文 |
出版年份: | 2021 |
编程语言: | Go |
下载链接: |
书籍均收集自互联网,仅供学习和研究使用,请莫用于商业用途。谢谢合作。 |
《Let's Go Further!》是 Alex Edwards 继《Let's Go》之后推出的进阶 Go Web 开发实战书,面向已具备 Go 基础、希望深入理解 RESTful JSON API 设计、数据库交互、部署与运维的开发者。全书围绕一个名为 Greenlight 的电影信息 JSON API 项目展开,从零开始直至部署上线,覆盖生产级系统所需的关键技术点。
全书共 22 章,按「构建→安全→运维→扩展」四层递进:
/v1/healthcheck
、/v1/movies/:id
等,展示方法级别路由映射与 405 处理。writeJSON
辅助函数,统一封装结构体、envelope
包装、缩进与错误返回。json.Decoder
解析、校验结构体,支持未知字段拒绝、空值与类型错误提示。maxOpenConns
、maxIdleConns
、maxIdleTime
,并通过 migrate 工具做版本化迁移(movies 表及 CHECK 约束)。MovieModel
封装 SQL,实现 Insert、Get、Update、Delete。Runtime
类型,演示 MarshalJSON/UnmarshalJSON
高级序列化;利用 RETURNING
子句获取自增 ID 与版本号。version = version + 1
与行级版本校验,防止并发更新冲突,并定义 ErrEditConflict
统一返回 409。to_tsvector
)、按 genres 数组包含过滤。ORDER BY
,使用白名单防止注入。metadata
包含总记录数、当前页、最后一页等信息。context.WithTimeout
包装 Query/Exec,避免慢查询拖垮服务。jsonlog
包,以 JSON 格式输出 INFO/ERROR/FATAL 级别日志,包含请求方法、URL、堆栈等字段;与 http.Server 的 error log 集成。recoverPanic
捕获 panic,返回 JSON 500 并记录堆栈。rps
、burst
,或完全关闭限流。http.Server.Shutdown
完成正在处理的请求,最大宽限期 5 秒。UserModel
提供 Insert、GetByEmail、Update,处理 ErrDuplicateEmail
友好提示。POST /v1/users
完成数据验证、重复邮箱检测、密码哈希存储。总结:《Let's Go Further!》不仅教会你如何“写出能跑的 Go API”,更示范了“如何写出可上线、可维护、可扩展的生产级服务”。对于已读完《Let's Go》或具备 Go 基础、希望深入后端实战的开发者,本书是极佳的下一站。