使用Golang的flag包解析-write和-list命令行参数;2. 通过time.Now().Format生成时间戳;3. 按日期将日记存为logs/2006-01-02.txt格式;4. 写入时用os.OpenFile追加内容;5. 列出时遍历logs目录读取.txt文件并输出。

用 Golang 写一个命令行日记系统,其实不难。核心是文件读写、时间处理和命令行参数解析。只要掌握这几个点,就能快速做出一个实用的小工具。
先创建项目目录,比如 diary,进入目录后运行 go mod init diary 初始化模块。项目可以简单分成几个部分:main.go 处理逻辑入口,cmd/ 存放命令解析,internal/ 放日记操作相关功能。
Golang 自带的 flag 包足够应付大多数 CLI 场景。假设我们支持两种操作:写日记(-write)和查看日记(-list)。代码可以这样写:
var (
writeFlag = flag.String("write", "", "写入日记内容")
listFlag = flag.Bool("list", false, "列出所有日记")
)
在 main 函数中调用 flag.Parse() 后,判断用户传了哪个参数,执行对应逻辑。比如用户输入:
go run main.go -write "今天天气不错"
程序就将这条内容保存到文件。
日记可以按天存储,也可以统一存进一个文件。推荐按天生成文件,比如 logs/2025-04-05.txt。每天的内容追加写入当天文件,方便查找。
保存时加入时间戳更清晰。Golang 的 time 包能轻松获取当前时间:
CA.LA
第一款时尚产品在线设计平台,服装设计系统
94
查看详情
t := time.Now()
formatted := t.Format("2006-01-02 15:04:05")
logEntry := fmt.Sprintf("[%s] %s\n", formatted, *writeFlag)
接着用 os.OpenFile 打开文件,模式设为 os.O_CREATE|os.O_WRONLY|os.O_APPEND,确保文件不存在时自动创建,已存在则追加内容。
当用户使用 -list 参数时,程序需要读取指定日期范围内的日志
文件。可以遍历 logs/ 目录下的所有 .txt 文件,按文件名排序(文件名是日期),逐个读取内容并输出到终端。
用 ioutil.ReadDir 获取文件列表,再用 strings.HasSuffix 判断是否是 .txt 文件。读取单个文件内容可以用 os.ReadFile(Go 1.16+),简洁安全。
输出时可以在每条记录前加上文件名(即日期),让用户清楚看到哪天写了什么。
基本上就这些。文件操作别忘了处理 error,尤其是 OpenFile 和 ReadFile 可能出错。时间格式注意用 Go 的标准时间 2006-01-02,别写错。整个流程不复杂,但很实用,适合练手文件和时间处理。
以上就是如何使用 Golang 构建一个命令行日记系统_Golang 文件读写与时间管理实战的详细内容,更多请关注其它相关文章!
相关文章:
TikTok评论显示延迟如何处理 TikTok评论刷新优化方法
QQ邮箱官方网页版登录 QQ邮箱个人邮箱快速访问
Win10怎么设置静态IP地址 Win10手动配置IP地址步骤【指南】
QQ官网正版登录链接 QQ在线登录入口最新
Golang如何使用net/url解析URL_Golang URL解析与处理方法
c++如何使用折叠表达式(Fold Expressions)_c++17可变参数模板新技巧
将HTML Canvas内容转换为可上传的图像文件(File对象)
抖音网页版快捷访问 抖音网页版网页版入口操作教程
我的世界官方游戏入口 我的世界官网平台直达链接
《噬血代码2》新预告片发布 展示游戏剧情
poki免费入口快捷访问 poki人气小游戏直接玩站点
怎样把文件彻底粉碎无法恢复_Windows下安全删除敏感数据【隐私保护】
小红书网页版入口链接分享 小红书官网直接进
Lar*el如何正确地在控制器和模型之间分配逻辑_Lar*el代码职责分离与架构建议
12306怎么选座位选到安静区_12306选座安静区域选择策略
Python async/await 协程:CPU密集型任务的陷阱与解决方案
高德地图总提示网络异常怎么办 高德地图离线导航设置与网络排查方法
蛙漫2台版漫画地址 Manwa2正版网页版链接
Lar*el Eloquent:高效统计带条件关联模型的数量
Go语言JSON解析深度指南:动态访问与结构体映射实践
零跑汽车11月交付量达70327台 实现连续9个月正增长
CSS响应式网页如何实现主次模块比例自适应_flex-grow与flex-shrink调整
向日葵客户端怎么进行远程CentOS控制_向日葵客户端远程CentOS控制操作教程
sublime如何配置Python开发环境_将sublime打造成轻量级Python IDE
如何将HTML表格多行数据保存到Google Sheets
HTML空白字符处理机制:渲染、DOM与编码实践
解决Python logging 中 datefmt 导致时间戳固定不变的问题
解决Django多数据库/多Schema环境下外键迁移问题
uc手机浏览器网页版入口 uc浏览器手机版便捷登录首页
excel如何生成目录 excel一键生成工作表目录超链接
抖音DOU+怎么投最有效 抖音付费推广的ROI提升技巧
J*aScript中赋值与自增运算符的复杂交互与执行机制
腾讯视频怎么使用多账号家庭管理_腾讯视频家庭多账号统一管理与权限分配教程
如何修改开机登录密码_Windows账户安全设置超详细教程【必学】
TikTok搜索结果不显示如何解决 TikTok搜索刷新优化方法
Golang如何实现容器化日志收集与分析_Golang容器日志收集分析方法
PHP面向对象编程中避免重复创建PDO数据库连接的最佳实践
在J*a中如何开发简易博客标签推荐系统_博客标签推荐项目实战解析
c++如何使用Catch2编写单元测试_c++简洁易用的BDD风格测试框架
邮编格式怎么匹配地址_根据邮编格式快速匹配详细地址的技巧
C++如何跨平台操作文件和目录_C++17标准库std::filesystem的使用教程
QQ邮箱网页版入口 QQ邮箱官方邮箱登录通道
Python:递归比较文件夹内容并找出特定类型文件的差异
win11开机启动修复循环怎么办 Win11无法进入系统高级启动解决方法【修复】
如何使用spryker/configurable-bundles-products-resource-relationship模块解决复杂产品捆绑关系难题
如何创建独立于主系统的J*a运行环境_隔离式环境搭建策略
在J*aScript中复现SciPy的B样条拟合与求值:关键考量
sublime侧边栏怎么增强功能_SideBarEnhancements for sublime安装与配置
Lar*el Eloquent:基于关联关系是否存在进行父模型过滤与删除
Python多线程中正确使用sigwait处理SIGALRM信号