如何在Golang中开发Todo列表应用_使用切片和结构体管理任务

14次阅读

go中Todo应用用结构体定义任务、切片管理列表,支持增删查改;ID自增,Completed用bool封装AddTodo、ToggleTodo等函数,命令行交互实现add/done/list功能。

如何在Golang中开发Todo列表应用_使用切片和结构体管理任务

在 Go 中开发一个简单的 Todo 列表应用,核心是用结构体定义任务数据,用切片([]Todo)动态管理多个任务。这种方式轻量、高效,无需外部依赖,适合学习和小型工具场景。

定义任务结构体

每个任务至少需要标识、内容、完成状态三个字段。结构体应导出首字母大写的字段,便于 jsON 序列化或后续扩展:

示例:

type Todo struct {     ID        int    `json:"id"`     Text      string `json:"text"`     Completed bool   `json:"completed"` }

注意:ID 可用自增整数模拟唯一性(生产环境建议用 UUID 或数据库主键);Completed 用布尔值清晰表达状态。

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

用切片存储和操作任务列表

声明一个全局或局部的 []Todo 切片作为数据容器,所有增删查改都围绕它进行:

  • 添加任务:用 append() 追加新实例,ID 可基于切片长度自动分配(如 len(todos) + 1
  • 查找任务:遍历切片,按 ID 匹配,返回指针可直接修改原数据
  • 更新任务:找到对应元素后直接赋值,如 todo.Completed = true
  • 删除任务:用切片截取技巧(如 todos = append(todos[:i], todos[i+1:]...))避免内存泄漏

封装基础操作函数提升可读性

把重复逻辑抽成函数,例如:

func AddTodo(todos *[]Todo, text string) {     id := len(*todos) + 1     *todos = append(*todos, Todo{ID: id, Text: text, Completed: false}) }  func ToggleTodo(todos []Todo, id int) bool {     for i := range todos {         if todos[i].ID == id {             todos[i].Completed = !todos[i].Completed             return true         }     }     return false }

注意传参方式:添加需修改切片底层数组,用指针;查询/切换只需读取或原地修改,传值即可(Go 中切片本身含指针,传值不影响性能)。

简单命令行交互演示流程

fmt.Scanlnswitch 模拟基础 CLI:

  • 输入 add 购买牛奶 → 调用 AddTodo
  • 输入 done 2 → 调用 ToggleTodo
  • 输入 list → 遍历打印,已完成任务加 [x] 前缀

无需框架,几十余行代码就能跑通完整流程,适合理解 Go 的数据建模与控制流本质。

text=ZqhQzanResources