信息发布→ 登录 注册 退出

如何使用 Golang 构建一个命令行日记系统_Golang 文件读写与时间管理实战

发布时间:2025-11-21

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

如何使用 golang 构建一个命令行日记系统_golang 文件读写与时间管理实战

用 Golang 写一个命令行日记系统,其实不难。核心是文件读写、时间处理和命令行参数解析。只要掌握这几个点,就能快速做出一个实用的小工具。

初始化项目结构

先创建项目目录,比如 diary,进入目录后运行 go mod init diary 初始化模块。项目可以简单分成几个部分:main.go 处理逻辑入口,cmd/ 存放命令解析,internal/ 放日记操作相关功能。

使用 flag 解析命令行输入

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 CA.LA

第一款时尚产品在线设计平台,服装设计系统

CA.LA 94 查看详情 CA.LA
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信号 

在线客服
服务热线

服务热线

4008988990

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!