Go轻量命令行记事本:用纯文本按“时间戳\t内容”单行存储,支持add/list/delete子命令;原子写入(临时文件+重命名),行号越界校验,bufio防大行,彩色提示,-f指定文件。
用 Go 写一个轻量命令行记事本,核心是读写本地文件 + 解析命令行参数,不需要 Web 或数据库。关键在于结构清晰、操作原子、避免覆盖丢失数据。
每条记录用一行文本保存,时间戳 + 内容,用制表符分隔,方便解析也保持可读性。例如:
2025-05-20T14:22:36Z 今天要买牛奶用 JSON 行(JSON Lines) 也可,但纯文本更简单;不推荐二进制或 SQLite——小工具应保持零依赖、易备份。
用 flag.SubCommand 或更简洁的 github.com/spf13/cobra(推荐),但纯标准库也能做。基础逻辑如下:
go run main.go add "开会讨论API设计"),拼上当前时间,追加到文件末尾-n 5 限制条数delete 3),读全文件 → 跳过第 N 行 → 写回新内容(注意:不是原地修改,避免 IO 中断损坏)避免常见坑:
os.Stat 检查文件是否存在,不存在则创建(用 os.Create)os.WriteFile 或 ioutil.WriteFile(Go 1.16+ 推荐前者),确保原子写入(先写临时文件,再 os.Rename)bufio.Scanner,防超长行导致内存暴涨命令行不必花哨,但要有基本反馈:
提示(用 \033[32m...\033[0m 控制终端颜色)os.Exit(1)
1. 、2. ),方便 delete 时引用notes.txt,可通过 -f notes_alt.txt 指定不复杂但容易忽略细节,把读写分离、行号对齐、错误退出这三件事做稳,就是一个可靠的小工具。