如何在Golang中开发Todo列表应用_使用切片和结构体管理任务
发布时间 - 2026-01-01 00:00:00 点击率:次Go中Todo应用用结构体定义任务、切片管理列表,支持增删查改;ID自增,Completed用bool;封装AddTodo、ToggleTodo等函数,命令行交互实现add/done/list功能。
在 Go 中开发一个简单的 Todo 列表应用,核心是用结构体定义任务数据,用切片([]Todo)动态管理多个任务。这种方式轻量、高效,无需外部依赖,适合学习和小型工具场景。
定义任务结构体
每个任务至少需要标识、内容、完成状态三个字段。结构体应导出首字母大写的字段,便于 JSON 序列化或后续扩展:
示例:
type Todo struct {
ID int `json:"id"`
Text string `json:"text"`
Completed bool `json:"completed"`
}
注意:ID 可用自增整数模拟唯一性(生产环境建议用 UUID 或数据库主键);Completed 用布尔值清晰表达状态。
用切片存储和操作任务列表
声明一个全局或局部的 []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.Scanln 和 switch 模拟基础 CLI:
- 输入
add 购买牛奶→ 调用
AddTodo - 输入
done 2→ 调用ToggleTodo - 输入
list→ 遍历打印,已完成任务加[x]前缀
无需框架,几十余行代码就能跑通完整流程,适合理解 Go 的数据建模与控制流本质。
# js
# json
# go
# golang
# app
# 工具
# switch
# 封装
# 结构体
# bool
# 指针
# 切片
# len
# append
# 数据库
# 遍历
# 命令行
# 就能
# 多个
# 只需
# 可直接
# 十余
# 完成任务
# 主键
# 首字母
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何选择PHP开源工具快速搭建网站?
Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】
Laravel如何实现一对一模型关联?(Eloquent示例)
html5如何实现懒加载图片_ intersectionobserver api用法【教程】
如何在云主机上快速搭建网站?
宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法
Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤
HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】
如何实现建站之星域名转发设置?
ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法
HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】
Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】
JavaScript如何实现音频处理_Web Audio API如何工作?
微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】
Laravel中的withCount方法怎么高效统计关联模型数量
Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
昵图网官网入口 昵图网素材平台官方入口
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
长沙企业网站制作哪家好,长沙水业集团官方网站?
如何用wdcp快速搭建高效网站?
Laravel如何实现模型的全局作用域?(Global Scope示例)
jQuery 常见小例汇总
javascript如何操作浏览器历史记录_怎样实现无刷新导航
js实现获取鼠标当前的位置
移动端脚本框架Hammer.js
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
微信小程序 canvas开发实例及注意事项
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
装修招标网站设计制作流程,装修招标流程?
Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】
如何在阿里云虚拟服务器快速搭建网站?
Laravel如何实现用户注册和登录?(Auth脚手架指南)
网站制作报价单模板图片,小松挖机官方网站报价?
如何在局域网内绑定自建网站域名?
Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程
laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法
在线制作视频的网站有哪些,电脑如何制作视频短片?
WEB开发之注册页面验证码倒计时代码的实现
谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
Linux后台任务运行方法_nohup与&使用技巧【技巧】
香港网站服务器数量如何影响SEO优化效果?
IOS倒计时设置UIButton标题title的抖动问题
微信小程序 闭包写法详细介绍
Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】
教你用AI将一段旋律扩展成一首完整的曲子
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】
Laravel怎么为数据库表字段添加索引以优化查询
上一篇:IOS 中弹框的实现方法整理
上一篇:IOS 中弹框的实现方法整理


AddTodo