新闻中心

如何用 Golang 编写一个命令行记账工具_Golang CLI 账本程序实战讲解

2025-11-15
浏览次数:
返回列表
答案是使用Golang标准库实现一个简洁的CLI记账工具,通过Record结构体存储账目,JSON文件持久化数据,flag解析命令行参数,支持添加、列出、统计功能,程序启动时加载ledger.json,退出时保存,用os.Args判断子命令,add命令添加带ID和时间的记录,list显示所有条目,balance计算收入与支出差额,核心逻辑清晰可扩展。

如何用 golang 编写一个命令行记账工具_golang cli 账本程序实战讲解

用 Golang 写一个命令行记账工具,核心是简洁、实用、可扩展。我们不依赖复杂框架,只用标准库就能快速实现一个支持记录收支、查询账目、统计汇总的 CLI 账本程序。

功能设计与数据结构

先明确这个工具的基本功能:

  • 添加一笔账目(金额、类型、备注)
  • 列出所有账目
  • 按条件筛选(如支出/收入)
  • 显示当前余额

每条账目信息可以用结构体表示:

type Record struct {
  ID int `json:"id"`
  Amount float64 `json:"amount"`
  Type string `json:"type"` // income / expense
  Note string `json:"note"`
  Time string `json:"time"`
}

账本数据可以保存在本地 JSON 文件中,比如 ledger.json,便于持久化和人工查看。

文件读写与数据持久化

程序启动时从文件加载账目列表,退出前写回。使用 encoding/json 处理序列化。

读取账本示例:

func loadRecords() ([]Record, error) {
  file, err := os.Open("ledger.json")
  if err != nil {
    if os.IsNotExist(err) {
      return []Record{}, nil
    }
    return nil, err
  }
  defer file.Close()
  var records []Record
  json.NewDecoder(file).Decode(&records)
  return records, nil
}

保存账本也很直接:

func s*eRecords(records []Record) error {
  file, err := os.Create("ledger.json")
  if err != nil {
    return err
  }
  defer file.Close()
  return json.NewEncoder(file).Encode(records)
}

命令行参数解析

使用标准库 os.Args 或更清晰的 flag 包处理用户输入。

Reachout.ai Reachout.ai

一个AI驱动的视频开发平台,专为忙碌的企业家和销售团队打造

Reachout.ai 142 查看详情 Reachout.ai

例如支持以下命令:

  • add -amount=100 -type=income -note="工资"
  • list
  • balance

用 flag 实现 add 命令:

var addCmd = flag.NewFlagSet("add", flag.ExitOnError)
var addAmount = addCmd.Float64("amount", 0, "金额")
var addType = addCmd.String("type", "expense", "类型: income 或 expense")
var addNote = addCmd.String("note", "", "备注")

主函数中判断子命令:

if len(os.Args)   fmt.Println("用法: ledger [add|list|balance]")
  os.Exit(1)
}
switch os.Args[1] {
case "add":
  addCmd.Parse(os.Args[2:])
  // 添加逻辑
case "list":
  // 列出所有
case "balance":
  // 计算余额
}

核心功能实现

添加一条记录:

records, _ := loadRecords()
newID := 1
if len(records) > 0 {
  newID = records[len(records)-1].ID + 1
}
record := Record{
  ID: newID,
  Amount: *addAmount,
  Type: *addType,
  Note: *addNote,
  Time: time.Now().Format("2006-01-02 15:04"),
}
records = append(records, record)
s*eRecords(records)

计算余额只需遍历:

var income, expense float64
for _, r := range records {
  if r.Type == "income" {
    income += r.Amount
  } else {
    expense += r.Amount
  }
}
fmt.Printf("收入: %.2f\n支出: %.2f\n余额: %.2f\n", income, expense, income-expense)

基本上就这些。通过结构体定义数据,JSON 持久化,flag 解析命令,再加几个函数完成增查统,一个轻量高效的 CLI 记账工具就完成了。不复杂但容易忽略的是错误处理和时间格式统一,实际使用中建议加上。

以上就是如何用 Golang 编写一个命令行记账工具_Golang CLI 账本程序实战讲解的详细内容,更多请关注其它相关文章!


# 如何实现  # 北京民宿行业网站建设  # 家电网络营销推广策略  # 香港食品营销推广  # 北京干燥设备网站建设  # 桌子seo优化  # 营销服务和业务推广  # 商品视频 素材网站推广  # 辽阳关键词排名优化技巧  # 肇庆市问答营销推广排名  # 湖北seo技巧哪个好用  # 几个  # 加载  # 的是  # 复用  # golang  # 启动时  # 如何使用  # 如何用  # 数据结构  # 命令行  # 标准库  # switch  # 工具  # edge  # app  # go  # json  # js  # 命令行工具 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 夸克AO3官网入口_AO3镜像网站2025推荐  css链接悬停下划线样式如何自定义_使用::after结合content和transition  抖音未来赚钱的新趋势 2025年值得关注的变现风口分析  Typer应用中动态命令行参数的解析与处理  照顾宝贝2小游戏点击立即在线玩  Yandex免登录网页版地址 Yandex搜索引擎官方访问入口  漫蛙2网页版漫画入口 漫蛙漫画在线官方登录  韩小圈电脑版在线入口_网页版免费登录地址  《刺客信条4:黑旗》重制版新细节曝光:无缝加载 地图更细致!  蓝湖怎样用切图标注提对接效率_蓝湖用切图标注提对接效率【设计对接】  python3时间如何用calendar输出?  动漫花园资源网使用步骤_动漫花园资源网下载流程  Go与Ruby之间实现AES加密互通:CFB模式下的密钥长度匹配策略  顺丰快件物流信息 官方网站查询入口  我的世界mc.js免费游戏直接能玩 我的世界mc.js小游戏免费秒玩入口  Promise错误处理:在catch后终止链式then执行的策略  jQuery Mask 插件中实现电话号码固定前导零的教程  Win10怎么设置静态IP地址 Win10手动配置IP地址步骤【指南】  想当下一个《2077》?《心之眼》Steam评价升至"多半好评"  c++如何使用TBB库进行任务并行_c++ Intel线程构建模块  快速CSGO开箱网站指南 CSGO开箱平台推荐  淘宝网网页版登录入口 淘宝官方网页版快捷登录  Python实时数据流中的动态最值查找策略  在J*a中如何开发简易电子商务商品管理系统_商品管理系统项目实战解析  Mac终端命令大全_Mac常用Terminal指令速查  深入理解Go语言中的指针类型:以*string为例  Golang如何实现容器化日志收集与分析_Golang容器日志收集分析方法  C++如何比较两个字符串_C++ string compare函数与操作符对比  KFC游戏互动怎么赢取优惠券_KFC线上游戏活动参与与优惠代码赢取教程  新三国志曹操传110级星符试炼夏侯渊极难攻略  126邮箱手机版登录官网2026_126手机邮箱免费入口最新  TikTok搜索结果不显示如何解决 TikTok搜索刷新优化方法  Adobe PDF表单中利用J*aScript解析与格式化日期组件的教程  深入理解Promise链:如何在catch后中断then的执行  漫蛙2漫画入口 漫蛙正版网页漫画直达网址  创客贴用户入口官网登录 创客贴网页版电脑版系统  DLsite中文平台入口 DLsite官网内容在线查看  LINUX的perf命令入门_LINUX官方性能分析工具的使用与解读  PS5 Pro有点优势但不多! 《燕云十六声》PS5平台与PC性能画面对比  文心一言怎样用批量生成做多版文案_文心一言用批量生成做多版文案【批量创作】  yy漫画网页版官方入口_yy漫画官网登录页面链接  圆通快递查询实时追踪 圆通物流包裹状态快速查看  12306几点到几点不能订票? | 官方最新系统维护时间全解析  豆包手机助手发布技术预览版:直接嵌入手机系统!努比亚样机发售  如何使用 Excel 发布器与 Power BI 分享 Excel 洞察  Python多线程中正确使用sigwait处理SIGALRM信号  Centos/Linux 系统下安装 composer 的完整步骤  天猫2025双十一0点秒杀攻略 天猫爆款抢购时间  高德地图怎么看全景照片_高德地图全景照片浏览教程  微信商城在哪里打开【步骤】 

搜索