综合项目实战记录(短链接服务)
把前面四篇的东西缝合起来:一个「从需求到 Docker 部署」的完整短链接服务,走一遍 Go 工程化的真实流程 一、简述 短链接服务是一个完美的「毕业设计」:需求明确、覆盖路由/存储/并发/测试/构建全链路、不引入任何第三方 Web 框架也能跑(正适合巩固 net/http)。本文按真实开发顺序走:需求分析 → 目录设计 → 存储接口 → 短码生成 → HTTP 路由 → 计数 → 单元测试 → go mod → 构建与 Docker。 核心要点:这个项目刻意只用标准库写 HTTP(把 02-原生HTTP服务-net-http 练扎实),存储接口先给内存实现、日后可平移到 04-数据库接入-database-sql-gorm-sqlx 的 database/sql/gorm。它演示的是 Go 工程化的结构:cmd/ 装入口、internal/ 装业务、store 是抽象边界。 二、C++ 对照速查表 概念 C++ Go 关键差异 工程布局 src/ + CMake targets cmd/ + internal/ 目录即包,internal 强制隔离 抽象接口 抽象基类/接口类 interface{} 接口(store.URLStore) 鸭子类型式,一个接口多个实现 短码生成 自写 base62 自写(本项目实现) 逻辑两端一致,关注冲突处理 重定向 手写响应头 Location http.Redirect(w, r, url, 302) 标准库一行 并发安全 std::mutex / std::atomic sync.RWMutex + map 读写锁分离,并发读不死锁 单元测试 gtest/test framework testing + go test table-driven 是惯例 构建 CMake/ninja go build ./cmd/server 单二进制,静态链接 容器化 手写 Dockerfile 依赖编译环境 golang builder 镜像 + 多阶段 官方镜像成熟,CGO 关掉即纯静态 三、逐主题详解 本项目按「需求 → 结构 → 代码 → 测试 → 构建 → 部署」的顺序推进,每一小步都有可直接运行的代码片段。 ...
豫公网安备41108202000982号