用 Go 标准库可构建轻量级 Todo 应用:定义 Todo 结构体与内存 map 存储,实现增删改 HTTP 接口,手动注册路由,支持 curl 测试,后续可扩展持久化或前端对接。
用 Go 构建一个轻量级待办事项(Todo)应用并不需要框架,纯标准库就能搞定。核心是定义数据结构、实现增删改逻辑,并通过简单 HTTP 接口暴露功能。
先用 struct 表示一条待办事项,包含 ID、内容、完成状态和创建时间:
注意:ID 使用自增整数,避免依赖数据库;所有数据暂存于内存 map 中,适合学习和原型开发。
Todo 结构体,字段为 ID int、Text string、Done bool、CreatedAt time.Time
map[int]*Todo 存储全部待办项,键为 ID,值为指针便于更新nextID 记录下一个可用 ID,每次添加后递增每个操作对应一个 HTTP 处理函数,统一接收 JSON 请求体,返回 JSON 响应:
{"text": "..."},生成新 Todo,存入 map,返回 201 和完整对象Done 字段,返回更新后的对象错误处理要具体:ID 不存在返回 404,JSON 解析失败返回 400,路径参数非数字返回 400。
使用 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/todoscurl http://localhost:8080/todos 查看列表curl -X PATCH http://localhost
:8080/todos/1 标记完成后续想持久化?把 map 换成 SQLite(用 mattn/go-sqlite3)或加 Redis 支持;想支持前端?保持当前 JSON API 即可对接 Vue/React;想更健壮?加上中间件做日志、恢复 panic、限制请求体大小。