答案:使用Golang通过JSON文件实现笔记应用的增删改查功能,数据持久化至本地。项目结构清晰,含main.go、note业务逻辑与storage存储操作,定义Note结构体并用json tag序列化,通过LoadNotes和SaveNotes读写文件,实现Add、List、FindByID、Delete方法,结合flag处理命令行参数完成交互,确保目录与文件初始化,适合学习文件操作与结构设计。

用 Golang 实现一个简易笔记应用,核心在于实现基本的增删改查功能,并将数据持久化到本地文件。不需要依赖数据库,通过操作 JSON 文件即可完成数据存储。下面一步步说明如何构建这样一个项目。
项目结构设计
为了让代码清晰易维护,建议按功能划分目录结构:
note-app/├── main.go
├── cmd/
├── internal/
│ └── note/
│ ├── note.go
│ └── storage.go
└── data/notes.json
将业务逻辑放在 internal/note 目录下,main.go 负责调用命令行接口,data 目录存放笔记数据文件。
定义笔记数据结构
在 internal/note/note.go 中定义笔记结构体:
立即学习“go语言免费学习笔记(深入)”;
package note
type Note struct {
ID int `json:"id"`
Title string `json:"title"`
Content string `json:"content"`
Created string `json:"created"`
}
使用 json tag 确保字段能正确序列化和反序列化。ID 用于唯一标识,Created 字段记录创建时间。
实现本地文件存储
在 storage.go 中实现文件读写逻辑。核心是读取 notes.json 文件,加载笔记列表,以及保存更新后的数据。
关键函数包括:
- LoadNotes():从 JSON 文件读取所有笔记
- SaveNotes():将笔记切片写回文件
- GenerateID():基于现有笔记生成新 ID
示例 SaveNotes 实现:
func SaveNotes(notes []Note, filename string) error {
data, err := json.MarshalIndent(notes, "", " ")
if err != nil {
return err
}
return os.WriteFile(filename, data, 0644)
}
使用 MarshalIndent 让 JSON 文件更易读。读取时用 json.Unmarshal 解析内容到切片。
实现增删改查功能
在 note 包中添加以下方法:
- Add(title, content string):创建新笔记,设置 ID 和时间
- List():返回所有笔记
- FindByID(id int):根据 ID 查找笔记
- Delete(id int):删除指定 ID 的笔记
例如 Add 方法:
func (n *NoteManager) Add(title, content string) {
now := time.Now().Format("2006-01-02 15:04")
note := Note{
ID: n.GenerateID(),
Title: title,
Content: content,
Created: now,
}
n.Notes = append(n.Notes, note)
n.Save()
}
NoteManager 可封装 Notes 切片和文件路径,统一管理状态和存储。
命令行交互
在 main.go 中使用 flag 或 fmt.Scanf 接收用户输入。简单起见可用 flag 实现子命令:
add -title "购物清单" -content "牛奶、面包" list delete -id 1
解析参数后调用对应 note 方法即可。例如 list 命令直接打印所有笔记标题和 ID。
基本上就这些。不复杂但容易忽略的是错误处理和文件初始化——确保 data/ 目录存在,notes.json 初始为 []。整个项目无需外部依赖,适合练手 Golang 文件操作和结构体设计。










