如何在Golang中实现待办事项管理项目

如何在Golang中实现待办事项管理项目

golang中实现一个待办事项管理项目,核心是构建清晰的数据结构、提供基本的增删改查功能,并选择合适的存储方式。下面是一个简单但完整的实现思路,适合初学者上手并扩展。

定义待办事项结构体

每个待办事项通常包含ID、标题、是否完成和创建时间等字段。使用结构体来表示这些信息:

type Todo struct {     ID        int       `json:"id"`     Title     string    `json:"title"`     Completed bool      `json:"completed"`     CreatedAt time.Time `json:"created_at"` }

这个结构体可以用于内存存储或序列化为JSON输出,方便后续与API集成。

实现基础操作函数

围绕Todo结构体,实现添加、查看、更新和删除功能。以下是在内存中操作的示例(使用切片存储):

立即学习go语言免费学习笔记(深入)”;

  • 添加任务:追加新任务到列表,自增ID
  • 列出所有任务:返回当前所有待办项
  • 标记完成:根据ID查找并设置Completed为true
  • 删除任务:按ID移除指定任务

示例代码片段:

var todos []Todo var nextID = 1  func AddTodo(title string) Todo {     todo := Todo{         ID:        nextID,         Title:     title,         Completed: false,         CreatedAt: time.Now(),     }     todos = append(todos, todo)     nextID++     return todo }  func GetTodos() []Todo {     return todos }  func CompleteTodo(id int) bool {     for i := range todos {         if todos[i].ID == id {             todos[i].Completed = true             return true         }     }     return false }  func DeleteTodo(id int) bool {     for i := range todos {         if todos[i].ID == id {             todos = append(todos[:i], todos[i+1:]...)             return true         }     }     return false }

添加命令行或http接口

你可以通过命令行交互让用户操作待办事项,也可以用net/http包暴露REST风格API。

例如,启动一个简单的HTTP服务:

如何在Golang中实现待办事项管理项目

乾坤圈新媒体矩阵管家

新媒体账号、门店矩阵智能管理系统

如何在Golang中实现待办事项管理项目17

查看详情 如何在Golang中实现待办事项管理项目

http.HandleFunc("/todos", func(w http.ResponseWriter, r *http.Request) {     switch r.Method {     case "GET":         json.NewEncoder(w).Encode(GetTodos())     case "POST":         var todo Todo         json.NewDecoder(r.Body).Decode(&todo)         newTodo := AddTodo(todo.Title)         json.NewEncoder(w).Encode(newTodo)     } })  http.HandleFunc("/todos/complete/", func(w http.ResponseWriter, r *http.Request) {     id, _ := strconv.Atoi(strings.TrimPrefix(r.URL.Path, "/todos/complete/"))     if CompleteTodo(id) {         fmt.Fprintf(w, "Task %d marked as completed", id)     } else {         http.NotFound(w, r)     } })

这样就可以用curl测试功能,比如curl -X POST -H "Content-Type: application/json" -d '{"title":"Learn Go"}' http://localhost:8080/todos

可选:持久化数据

目前数据保存在内存中,程序关闭后会丢失。可以将数据写入JSON文件或使用sqlite等轻量数据库

以JSON为例,程序启动时从文件加载todos,退出前保存:

  • 使用json.Marshal将切片写入文件
  • 使用json.Unmarshal从文件读取并初始化

注意处理文件读写错误,确保数据一致性。

基本上就这些。从结构体设计到功能实现,再到接口暴露,golang的简洁语法让这类项目很容易快速搭建。后续可加入优先级、截止日期、分类等功能进行扩展。

上一篇
下一篇
text=ZqhQzanResources