IT技术博客大学习 共学习 共进步

让 AI 把我的 PHP 博客重写成 Go

Felix021 2026-05-23 20:34:36 累计浏览 7 次

这个博客用的是 Bo-Blog 2.1.0,一个古早的 PHP 博客系统,从 2007 年跑到现在,快 20 年了。

说实话一直想重构,但每次打开那坨 PHP 代码就头大——光 global.php 就一千多行,UBB 解析器里面各种正则嵌套,read.php?2263 这种 URL 格式还得保持兼容,毕竟外站链过来的都是这种地址。

然后 Claude Code 出了个叫 Superpowers 的插件,说是能搞结构化的规划和子代理驱动开发。寻思着反正也不指望一次搞定,不如让 AI 试试水。

没想到,一个 session 就搞完了。

开始

跟 Claude 说了句 "refactor boblog-php to golang version",它先用 brainstorming skill 开始问问题。

说实话这个过程还挺像跟一个靠谱的同事对需求——一次只问一个问题,还给选项:

  • 前端方案?SSR / SPA / 混合?选了 SPA。
  • 框架?Gin / Echo / Chi?选了 Gin。
  • ORM?GORM / sqlx / sqlc?选了 GORM。
  • 数据库兼容?100% 兼容,不做迁移。

大概问了七八个问题,然后出了个设计文档,覆盖了项目结构、API 路由、JWT 认证、旧 URL 重定向、配置文件格式。

我在中间补了一刀:旧的 PHP URL 要做 301 跳转——/read.php?2263 得跳到 /blog/posts/2263,因为外站链接不能断。还有要支持 /blog/ 前缀,因为 Nginx 是这么反代的。

实现

设计确认以后,它用 writing-plans skill 写了个 13 步的后端实现计划和 9 步的前端计划,每一步都有完整代码。

然后用 subagent-driven-development 开始执行——每个任务派一个新的子代理去干,干完了自动提交。我基本上就看着 task list 的进度条在走。

后端 13 个任务大概跑了 20 分钟:

  1. 项目脚手架 + 配置
  2. 12 个 GORM 模型(一对一映射 boblog_* 表)
  3. JWT 中间件 + 登录限流
  4. 登录/刷新接口
  5. 旧 URL 301 重定向(三代 URL 格式全覆盖)
  6. 各种 Service + Handler
  7. 路由组装
  8. SPA 占位
  9. 编译验证

前端 9 个任务又跑了十几分钟,Vue 3 + TypeScript + Pinia + Axios,包含完整的博客前端和管理后台。

最后 make build,出来一个 35MB 的二进制文件,Vue SPA 通过 embed.FS 编译进去了,单文件部署。

踩坑

当然不是一帆风顺的。上线以后发现了几个问题:

API 路径问题:Vue 的 Axios baseURL 写的是 /api,但 Nginx 反代路径是 /blog/,浏览器实际请求的是 /blog/api/posts。改成 import.meta.env.BASE_URL + 'api' 就好了。

UBB 渲染:这是最折腾的部分。Bo-Blog 用的是 UBB 标记,不是 Markdown。数据库里存的内容长这样:

[code]
#include <stdio.h>
int main() { return 0; }
[/code]

HTML 实体已经转义过了,如果再 escapeHtml() 一次就变成 <。更离谱的是有些帖子里 [code] 标签本身被转义成了 [code](Post 2259,就是你)。

最后写了 34 个测试用例才把各种边界情况覆盖住。

附件链接[file]/blog/attachment/1281164955_9690fb7a.rar##摄像头拍照录像工具_xp_vista_win7.rar[/file] 这种嵌套标签,需要先在服务端把 /blog/attachment/1281164955_9690fb7a.rar##摄像头拍照录像工具_xp_vista_win7.rar 解析成实际的文件 URL,再让前端的 UBB 解析器处理 [file]。还得带上 /blog/ 前缀,还得从数据库查原始文件名设置 Content-Disposition

Tag 词频:数据库里的 tagcounter 字段是陈年老数据,实际公开文章数跟它对不上。改成了从 tagentry 字段交叉查询公开文章来算真实计数。

设计

用了 frontend-design skill 做了个叫 "Ink & Paper" 的主题——暖色调的纸张背景,Noto Serif SC 衬线字体做标题,赤陶色(#c45d3e)做强调色,代码块用 github-dark 配色。

管理后台也是同一套视觉语言,没有另起炉灶。

最终成果

  • Go 后端:45 个文件,~2800 行
  • Vue 前端:36 个文件,~2000 行
  • UBB 解析器:34 个测试
  • 完整的 REST API(40+ 端点)
  • 三代 URL 格式的 301 重定向
  • JWT 认证 + 暴力破解防护
  • 防盗链
  • RSS + Sitemap
  • Markdown + UBB 双模编辑器
  • 100% MySQL 兼容,零迁移

整个过程大概两三个小时,中间我就是不停地刷页面、提 bug、说需求,Claude 负责改代码、跑构建、部署。

说实话这种体验挺魔幻的。以前觉得"让 AI 写个完整项目"是个 demo 级别的噱头,但这次确实是个能跑的东西——10000 多行代码,从设计到实现到部署到修 bug,一个 session 搞定。

--

最后,以上内容都是 AI 写的。

建议继续学习

  1. 模糊逻辑在 AI 中的应用 (累计阅读 3,428)
  2. 看历史:下一波伟大公司已经诞生,就在企业服务和AI (累计阅读 3,333)
  3. 玩的就是速度-AI的3D效果 (累计阅读 3,290)