17370845950

如何在Golang中构建待办事项应用_支持添加、删除和完成操作
用 Go 标准库可构建轻量级 Todo 应用:定义 Todo 结构体与内存 map 存储,实现增删改 HTTP 接口,手动注册路由,支持 curl 测试,后续可扩展持久化或前端对接。

用 Go 构建一个轻量级待办事项(Todo)应用并不需要框架,纯标准库就能搞定。核心是定义数据结构、实现增删改逻辑,并通过简单 HTTP 接口暴露功能。

定义 Todo 数据结构和内存存储

先用 struct 表示一条待办事项,包含 ID、内容、完成状态和创建时间:

注意:ID 使用自增整数,避免依赖数据库;所有数据暂存于内存 map 中,适合学习和原型开发。

  • 定义 Todo 结构体,字段为 ID intText stringDone boolCreatedAt time.Time
  • map[int]*Todo 存储全部待办项,键为 ID,值为指针便于更新
  • 用全局变量 nextID 记录下一个可用 ID,每次添加后递增

实现三个核心操作的处理函数

每个操作对应一个 HTTP 处理函数,统一接收 JSON 请求体,返回 JSON 响应:

  • 添加(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、限制请求体大小。