用 Go 标准库可构建轻量级 Todo 应用:定义 Todo 结构体与内存 map 存储,实现增删改 HTTP 接口,手动注册路由,支持 curl 测试,后续可扩展持久化或前端对接。

用 Go 构建一个轻量级待办事项(Todo)应用并不需要框架,纯标准库就能搞定。核心是定义数据结构、实现增删改逻辑,并通过简单 HTTP 接口暴露功能。
定义 Todo 数据结构和内存存储
先用 struct 表示一条待办事项,包含 ID、内容、完成状态和创建时间:
注意:ID 使用自增整数,避免依赖数据库;所有数据暂存于内存 map 中,适合学习和原型开发。
- 定义
Todo结构体,字段为ID int、Text string、Done bool、CreatedAt time.Time - 用
map[int]*Todo存储全部待办项,键为 ID,值为指针便于更新 - 用全局变量
nextID记录下一个可用 ID,每次添加后递增
实现三个核心操作的处理函数
每个操作对应一个 HTTP 处理函数,统一接收 JSON 请求体,返回 JSON 响应:
立即学习“go语言免费学习笔记(深入)”;
-
添加(POST /todos):解析请求体中的
{"text": "..."},生成新 Todo,存入 map,返回 201 和完整对象 - 删除(DELETE /todos/{id}):从 URL 路径提取 ID,检查是否存在,存在则从 map 删除,返回 204
-
完成切换(PATCH /todos/{id}):提取 ID,找到对应项,翻转
Done字段,返回更新后的对象
错误处理要具体:ID 不存在返回 404,JSON 解析失败返回 400,路径参数非数字返回 400。
启动 HTTP 服务并注册路由
使用 http.ServeMux 手动注册路由,不依赖第三方路由器:
- 注册
"/todos"处理 GET(获取全部)和 POST(添加) - 注册
"/todos/"前缀,配合http.StripPrefix提取 ID,再分发到 delete/patch 处理逻辑 - 启动服务器监听
:8080,打印启动日志
可选:加一个简单的 HTML 页面(内联或静态文件)用于手动测试,但非必需。
快速验证与后续扩展建议
用 curl 测试最直接:
curl -X POST -H "Content-Type: application/json" -d '{"text":"买牛奶"}' http://localhost:8080/todos-
curl http://localhost:8080/todos查看列表 -
curl -X PATCH http://localhost:8080/todos/1标记完成
后续想持久化?把 map 换成 SQLite(用 mattn/go-sqlite3)或加 Redis 支持;想支持前端?保持当前 JSON API 即可对接 Vue/React;想更健壮?加上中间件做日志、恢复 panic、限制请求体大小。










