您的位置:首页 >Golang构建TODO命令行工具及数据持久化实现
发布于2026-01-31 阅读(0)
扫一扫,手机访问
用Go构建TODO命令行应用需聚焦三核心:命令解析(flag或cobra)、任务管理(Task结构体+内存操作+互斥控制)、JSON文件持久化(读写+原子保存)。

用 Go 写一个命令行 TODO 应用不难,关键在结构清晰、数据存得稳、操作够直觉。核心就三块:命令解析、任务管理逻辑、本地文件持久化。下面直接说怎么搭。
Go 自带 flag 包足够应付简单 CLI;如果想支持子命令(如 todo add、todo list)、自动 help、补全,推荐用 cobra——它几乎是 Go CLI 的事实标准。
比如用 cobra 初始化:
go mod init todo-cli
go get -u github.com/spf13/cobra/cobra
cobra init --pkg-name todo-cli
cobra add add
cobra add list
cobra add done
cobra add delete
生成的命令结构自动分层,每个子命令对应一个独立文件,便于维护。
先设计一个干净的 Task 结构体:
type Task struct {
ID int `json:"id"`
Text string `json:"text"`
Done bool `json:"done"`
CreatedAt time.Time `json:"created_at"`
}
用 slice 临时存任务([]Task),但注意 ID 要自增、去重、避免并发写冲突。简单起见,加个全局 mutex 或直接串行操作(CLI 本就是单次运行);若后续扩展为服务,再考虑 sync.Map 或更严谨状态管理。
不依赖数据库,把任务存成 tasks.json 最实用。每次启动时读一次,每次变更后写一次。
os.ReadFile("tasks.json") + json.Unmarshal,首次运行文件不存在就返回空切片json.MarshalIndent 格式化输出,再 os.WriteFile 覆盖写入(注意加 0644 权限)tasks.json.tmp),成功后再 os.Rename 替换原文件,防断电/崩溃导致数据清空每个子命令做一件事,别堆逻辑:
todo add "买牛奶"),生成新 Task,追加进列表,保存Done = true,保存可选加分项:支持 --all 列出已完成项、用 task.Text 模糊搜索、加颜色(用 github.com/fatih/color)提升终端体验。
基本上就这些。没花哨框架、不碰网络、不搞 ORM,纯 Go 标准库 + 少量成熟包,跑得快、编译成单二进制、扔哪都能用。数据存在本地 JSON,透明可控,备份恢复也方便。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9