您的位置:首页 >用Golang开发待办事项应用:文件存储与CRUD实现
发布于2025-07-04 阅读(0)
扫一扫,手机访问
用Golang开发一个待办事项应用的关键在于理清结构、处理数据持久化并实现CRUD操作。1. 结构设计上,分为main.go入口、todo包下的数据模型与存储逻辑、以及存放JSON文件的data目录;2. 数据模型使用Todo结构体与Todos切片,并通过encoding/json进行序列化;3. 文件读写通过LoadFromFile与SaveToFile函数实现加载与保存功能;4. CRUD操作包括Add添加任务、遍历输出列表、MarkDone标记完成、Delete删除任务;5. 主程序通过解析命令行参数调用对应方法,完成交互。整个过程模块清晰,适合Go语言入门实践。

用Golang开发一个待办事项应用,结合文件存储和CRUD操作,其实并不难。关键在于理清结构、处理好数据持久化,并实现基本的增删改查功能。

这篇文章会从结构设计、数据模型、文件读写、以及具体操作实现这几个方面来展开,适合刚入门Go语言的朋友参考。

在开始写代码之前,先规划一下整体结构。一个简单的待办事项应用通常包括:
建议将代码分为几个包或目录,比如:

todo-app/
├── main.go
├── todo/
│ ├── todo.go
│ └── storage.go
└── data/
└── todos.json这样模块清晰,后续也方便扩展。
我们先定义一个Todo结构体,表示每一条待办事项:
type Todo struct {
ID int `json:"id"`
Title string `json:"title"`
Done bool `json:"done"`
}然后需要一个列表来保存所有待办事项:
type Todos []Todo
为了支持文件存储,我们可以使用标准库中的encoding/json来序列化和反序列化数据。
我们要做的就是:
todos.json加载数据可以写两个函数:LoadFromFile 和 SaveToFile
func LoadFromFile(path string) (Todos, error) {
data, err := os.ReadFile(path)
if os.IsNotExist(err) {
return Todos{}, nil
}
if err != nil {
return nil, err
}
var todos Todos
err = json.Unmarshal(data, &todos)
return todos, err
}
func (t *Todos) SaveToFile(path string) error {
data, _ := json.MarshalIndent(t, "", " ")
return os.WriteFile(path, data, 0644)
}这两个函数是整个持久化的基础,一定要确保路径正确,且有读写权限。
接下来就是实现增删改查了,这部分逻辑相对简单,但要注意边界条件。
func (t *Todos) Add(title string) {
newID := len(*t) + 1
*t = append(*t, Todo{
ID: newID,
Title: title,
Done: false,
})
}直接遍历输出即可:
for _, todo := range *todos {
status := " "
if todo.Done {
status = "x"
}
fmt.Printf("[%d] [%s] %s\n", todo.ID, status, todo.Title)
}通过ID查找并更新状态:
func (t *Todos) MarkDone(id int) error {
for i := range *t {
if (*t)[i].ID == id {
(*t)[i].Done = true
return nil
}
}
return fmt.Errorf("task not found")
}删除时要小心索引问题,可以用切片操作:
func (t *Todos) Delete(id int) error {
for i, todo := range *t {
if todo.ID == id {
*t = append((*t)[:i], (*t)[i+1:]...)
return nil
}
}
return fmt.Errorf("task not found")
}最后,在main.go里处理命令行参数,调用对应的方法。例如:
todo add "Buy milk" todo list todo done 1 todo delete 2
可以通过os.Args获取命令参数,也可以用flag包更规范地解析。
这部分就不贴完整代码了,重点是把各个操作映射到对应的函数调用上。
基本上就这些了。虽然只是个控制台应用,但已经涵盖了结构设计、数据建模、文件存储和基本CRUD操作的核心内容。你可以在此基础上加上Web界面或者数据库支持,继续拓展功能。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9