如何使用Golang实现命令行记事本_支持添加、删除和查看记录
技术百科
P粉602998670
发布时间:2025-12-26
浏览: 次 Go轻量命令行记事本:用纯文本按“时间戳\t内容”单行存储,支持add/list/delete子命令;原子写入(临时文件+重命名),行号越界校验,bufio防大行,彩色提示,-f指定文件。
用 Go 写一个轻量命令行记事本,核心是读写本地文件 + 解析命令行参数,不需要 Web 或数据库。关键在于结构清晰、操作原子、避免覆盖丢失数据。
设计数据结构和存储格式
每条记录用一行文本保存,时间戳 + 内容,用制表符分隔,方便解析也保持可读性。例如:
2025-05-20T14:22:36Z 今天要买牛奶用 JSON 行(JSON Lines) 也可,但纯文本更简单;不推荐二进制或 SQLite——小工具应保持零依赖、易备份。
支持 add / list / delete 三个子命令
用 flag.SubCommand 或更简洁的 github.com/spf13/cobra(推荐),但纯标准库也能做。基础逻辑如下:
-
add:读取剩余参数(如
go run main.go add "开会讨论API设计"),拼上当前时间,追加到文件末尾 -
list:逐行读文件,按时间倒序打印(最新在前),可加
-n 5限制条数 -
delete:按行号删(如
delete 3),读全文件 → 跳过第 N 行 → 写回新内容(注意:不是原地修改,避免 IO 中
断损坏)
保证文件操作安全与健壮
避免常见坑:
- 写入前先
os.Stat检查文件是否存在,不存在则创建(用os.Create) - 删除时校验行号是否越界(1 ≤ n ≤ 总行数),越界直接报错退出
- 所有写操作用
os.WriteFile或ioutil.WriteFile(Go 1.16+ 推荐前者),确保原子写入(先写临时文件,再os.Rename) - 打开文件读取时用
bufio.Scanner,防超长行导致内存暴涨
提供简易交互体验
命令行不必花哨,但要有基本反馈:
- 成功时输出绿色提示(用
\033[32m...\033[0m控制终端颜色) - 错误时输出红色提示并
os.Exit(1) - list 时给每行加编号(
1.、2.),方便 delete 时引用 - 默认数据文件设为
notes.txt,可通过-f notes_alt.txt指定
不复杂但容易忽略细节,把读写分离、行号对齐、错误退出这三件事做稳,就是一个可靠的小工具。
# ai
# 要有
# 小工具
# 不需要
# 不存在
# 也可
# 数据结构
# 设为
# 命令行
# 工具
# js
# json
# go
# golang
# 标准库
# 数据库
# git
# github
# 行号
# delete
# 临时文件
# 命令行参数
# sqlite
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- windows 10应用商店区域怎么改_windo
- Win10如何备份驱动程序_Win10驱动备份步骤
- 如何使用Golang反射创建map对象_动态生成键
- mac怎么安装adb_MAC配置Android A
- Windows10蓝屏代码DPC_WATCHDOG
- MAC如何隐藏文件夹及文件_MAC终端命令隐藏与第
- Win11怎么忘记WiFi网络_Win11删除已保
- php接口返回数据乱码怎么办_php接口调试编码问
- Mac如何解压zip和rar文件?(推荐免费工具)
- c++怎么实现大文件的分块读写_c++ 文件指针s
- 如何正确访问 Laravel 模型或对象的属性而非
- 如何使用Golang实现多重错误处理_Golang
- 使用类变量定义字符串常量时如何实现类型安全的 Li
- Windows电脑键盘突然失灵怎么办?(驱动与硬件
- Win11怎么关闭任务栏小图标_Windows11
- Windows10系统怎么查看显卡型号_Win10
- Win11怎样激活系统密钥_Win11系统密钥激活
- Windows系统文件被保护机制阻止怎么办_权限不
- Win11怎么设置默认浏览器Chrome_Wind
- 如何在Golang中使用container/hea
- Win10系统怎么查看端口状态_Windows10
- php中作用域操作符能访问私有静态属性吗_访问权限
- Win11键盘快捷键大全_Windows 11常用
- Win11怎么开启智能存储_Windows11存储
- php订单日志怎么导出excel_php导出订单日
- PHP主流架构怎么部署到Docker_容器化流程【
- Win11怎么开启HDR模式_Windows 11
- php转mp4怎么设置帧率_调整php生成mp4视
- Mac如何设置动态壁纸?(让桌面动起来)
- 如何在Golang中使用replace替换模块_指
- 如何在 Go 中调用动态链接库(.so)中的函数
- Linux如何安装Golang环境_Linux下G
- Windows10系统怎么查看系统版本_Win10
- Windows10系统怎么查看设备管理器_Win1
- php本地部署后session无法保存_sessi
- Win11怎么用设置清理回收站_Win11设置清理
- Windows10电脑怎么连接蓝牙设备_Win10
- 如何用正则与预处理结合精准拦截拼接式垃圾域名
- Win11怎么查看显卡显存_查询Win11显卡详细
- Win11怎么开启远程桌面_Win11系统远程桌面
- Win11怎么更改系统语言为中文_Windows1
- 如何在Golang中使用encoding/gob序
- Windows10如何更改日期格式_Win10区域
- Windows10电脑怎么设置电源按钮_Win10
- 如何使用Golang实现函数指针_函数变量与回调示
- 如何高效识别并拦截拼接式恶意域名 spam
- Win10如何更改电脑休眠时间_Windows10
- Windows10如何删除Windows.old_
- Mac怎么设置鼠标滚动速度_Mac鼠标设置详细参数
- Windows10怎么查看硬件信息_Windows

断损坏)
QQ客服