Go+React打造个人博客系统
序幕程序员的终极诅咒治好了如果你看过我之前的项目会发现我像个技术栈海王SvelteKit → 生态不够爽写复杂交互像在走钢丝 GoTemplHTMX → 极致纯粹但写现代UI像在用石器时代雕花 现在Go React → 嗯成年人的世界我全都要。承认吧我们这行最大的乐趣不是“把东西做出来”而是“用更顺手的工具再做一遍”。这次我决定不内耗了后端用 Go 保证性能和极简前端用 React 享受现代开发体验。跑起来的那一刻我摸着键盘笑了这次是真的舒服。 第一步Go 后端搭骨架拒绝 ORM 黑魔法我不喜欢 ORM 那种“猜你想干嘛”的黑魔法。写 SQL 明明很清晰为什么非要套一层隐式转换这次我选了sqlc。 我的操作流程写原生 SQL在queries/posts.sql里老老实实写SELECT * FROM posts WHERE slug ?运行 sqlc generate它自动扫一遍 SQL生成类型安全的 Go 代码接口抽象Repository Pattern用 Go 的interface把数据库操作包起来// 业务层只认接口不认具体数据库typePostRepositoryinterface{GetBySlug(ctx context.Context,slugstring)(*Post,error)List(ctx context.Context,limitint)([]Post,error)}真香时刻本地开发直接连SQLite文件连 Docker 都不用开。线上切PostgreSQL改一行配置业务代码0 修改。数据库的差异被完美隔离在实现层里。 第二步React 前端搞门面类型安全治好了精神内耗以前总觉得 React 重但真用上React TypeScript Shadcn Tailwind才知道什么叫“现代前端该有的样子”。️ 我是怎么对齐前后端类型的后端sqlc生成 Go 结构体前端直接定义同名 TS 接口。API 请求层封装一层类型守卫// 前端 API 调用类型一路护航exportconstapi{getPosts:async()requestPost[](/api/posts),getPost:async(slug:string)requestPost(/api/posts/${slug}),}改后端字段前端 TS 编译直接飘红。再也不用面对undefined is not a function的运行时玄学了。写页面像搭乐高状态管理、表单验证、暗色模式组件库一键带走开发效率直接拉满。 第三步go:embed施法单二进制文件走天下这是我最得意的一步。前后端分离开发单文件部署。 操作步骤前端执行pnpm build生成dist/静态资源在 Go 主入口文件加上魔法注释//go:embed ui/dist/*varuiFiles embed.FS// 路由里直接 serve 静态文件http.FileServer(http.FS(uiFiles))go build -o blog编译结果一个不到 20MB 的可执行文件。部署时scp blog userserver:./blog启动Nginx 反向代理前端 CDN 同步版本对齐焦虑全部不存在。机器重启后一键拉起运维复杂度直接归零。 第四步Makefile 偷懒大法一键启动丝滑开发本地开发最怕什么开 3 个终端窗口配环境变量等编译手动刷新。我直接用Makefile一条命令搞定dev: echo 启动开发模式... make dev-ui make dev-api dev-ui: cd ui pnpm dev # React Vite 热重载改代码秒刷新 dev-api: cd cmd air -c .air.toml # Go 文件变动自动重启终端敲make dev前后端同时跑起来。本地用 SQLite 文件直连保存代码浏览器自动更新。没有 Docker 依赖没有复杂编排就是纯粹的“写-看-改”正反馈循环。 复盘这套架构到底香在哪适合谁折腾完这一圈我整理了张对照表给同样在选型的朋友参考✅ 我为什么爱它⚠️ 你需要注意什么 部署极简一个二进制文件走天下 前端资源更新需重新编译 Go️ 全栈类型安全SQL→Go→TS 全程护航 学习曲线需熟悉 GoReactsqlc 存储层可插拔SQLite/Postgres/内存随意切 个人博客用确实有点“杀鸡用牛刀”⚡ 开发体验拉满热重载类型提示零配置DB 不适合需要独立前端 CDN 的大流量场景我的结论这不是过度工程而是“刚好满足我的控制欲”。如果你也是一个人干活讨厌运维琐事又舍不得现代前端生态这套栈能帮你把 80% 的精力留给写内容和调逻辑。 尾声代码是写给人看的博客跑起来的那天晚上我盯着终端里那行Listening on :8080突然觉得技术选型就像找搭档。没有绝对完美的只有此刻最合拍的。Go 给我底气和极简React 给我效率和愉悦。它们在我这个项目里握手言和而我终于能安心写下第一篇文章。当然我知道这稳定期不会太久。毕竟程序员的本能就是“听说 Solid.js 的信号机制很轻……”“HTMX 3.0 好像又行了……”算了先喝杯咖啡。下次重构咱们 6 个月后再见。☕️附我的项目结构my-blog/ ├── cmd/ # Go 主入口 ├── internal/ # 业务逻辑 Repository 接口 ├── queries/ # sqlc 原生 SQL ├── ui/ # React TS 前端 ├── Makefile # 偷懒神器 └── docker-compose.yml # 生产环境一键拉起