Go基础(③Cobra)

Cobra 是帮你快速开发命令行工具的框架

假设你想做一个叫 todo 的命令行工具,实现这些功能:

todo add "买牛奶" → 添加待办
todo list → 查看所有待办
todo done 1 → 标记第 1 个待办为已完成

没有 Cobra 的话,你需要自己写代码判断用户输入的是 add 还是 list,还要解析后面的参数,非常麻烦。

用 Cobra 的话,你只需要:

定义 add、list、done 这三个子命令
给每个命令写好具体执行逻辑
剩下的「解析用户输入」「判断执行哪个命令」「生成帮助信息(如 todo --help)」这些事,Cobra 全帮你做了

创建项目

mkdir cobra-demo && cd cobra-demo
go mod init cobra-demo# 安装 Cobra 库
go get github.com/spf13/cobra@latest# 安装 Cobra 命令行生成工具(可选,用于快速创建项目结构)
go install github.com/spf13/cobra-cli@latest# 用 cobra-cli 初始化项目(会生成基本结构)
cobra-cli init

初始化后,项目结构如下

cobra-demo/
├── cmd/
│   └── root.go   # 根命令定义
├── go.mod
├── go.sum
└── main.go       # 程序入口

add.go代码

package cmdimport ("fmt""strconv""github.com/spf13/cobra"
)// 定义 add 命令
var addCmd = &cobra.Command{Use:   "add",                               // 命令名称(使用方式:app add)Short: "将两个数字相加",                    // 短描述(帮助信息中显示)Long:  `将两个整数相加并打印结果。`,          // 长描述Args:  cobra.ExactArgs(2),                  // 必须传入 2 个参数Run: func(cmd *cobra.Command, args []string) {// 解析参数(字符串转整数)a, err := strconv.Atoi(args[0])if err != nil {fmt.Println("第一个参数必须是整数")return}b, err := strconv.Atoi(args[1])if err != nil {fmt.Println("第二个参数必须是整数")return}// 执行加法并输出结果fmt.Printf("%d + %d = %d\n", a, b, a+b)},
}// 初始化函数:将 add 命令添加到根命令
func init() {rootCmd.AddCommand(addCmd)
}

然后把add.go放入cmd文件夹,然后运行

go build -o calc.exe

123

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/921852.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/921852.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从 scheduler_tick 到上下文切换:深入解析 Linux 内核的 TIF_NEED_RESCHED 标志设置流程

Linux 是如何决定何时进行上下文切换的? 在Linux中,CPU 上下文切换是指当操作系统将 CPU 从一个进程切换到另一个进程时,保存当前进程的执行状态,并加载新进程的执行状态的过程就称为上下文切换。 但在 Linux 内核中&#xff0c…

Redis 深度解析:数据结构、持久化与集群

Redis (Remote Dictionary Server) 是一种高性能的键值(Key-Value)内存数据库,以其丰富的数据结构、极低的延迟、出色的稳定性和强大的集群能力,在现代应用程序的开发中扮演着至关重要的角色。无论是作为缓存、消息队列、会话存储…

HTTPS优化简单总结

性能损耗选择椭圆曲线,并生成椭圆曲线的计算耗时CA证书验证的耗时计算pre-master的耗时硬件优化HTTPS是计算密集型任务,不是IO密集型任务所以硬件最好买更高级的CPU,而不是网卡,磁盘协议优化ECDHE代替RSA,因为ECDHE可以…

从IFA再出发:中国制造与海信三筒洗衣机的“答案”

当全球消费电子行业的目光再次聚焦柏林,柏林国际电子消费品展览会(IFA2025)不仅成为创新产品的秀场,更悄然变身为中国企业讲述全球化进阶故事的重要舞台。近日,海信旗下三筒洗衣机——棉花糖Ultra全家筒迎来它的国际首秀,首次海外…

c++工程如何提供http服务接口

在 C 工程里给类似 /index/api/ 的服务,基本步骤如下: 选一个HTTP服务框架;起一条监听线程(或线程池);把路径-处理函数注册进去; 下面是 2 种简单的方案。方案 A:Crow(He…

cfshow-web入门-php特性

web89 <?php ​ include("flag.php"); highlight_file(__FILE__); ​ if(isset($_GET[num])){$num $_GET[num];if(preg_match("/[0-9]/", $num)){die("no no no!");}if(intval($num)){echo $flag;} } 正则匹配检查不能是数字&#xff0c;但…

ctfshow - web - 命令执行漏洞总结(二)

web73该题目没有开启web72的open_basedir&#xff0c;所以可以使用var_export(scandir(/));exit();进行目录扫描。读取文件函数&#xff1a;require_once()web74scandir()函数被禁用&#xff0c;使用glob://伪协议进行读取根目录文件。cvar_export(glob(../../../*));exit(); c…

如何将视频从安卓手机传输到电脑?

无论你是否是视频爱好者&#xff0c;你可能都希望知道如何将视频从安卓手机传输到电脑&#xff0c;以释放存储空间并防止性能问题。这也有助于同步视频或防止意外删除。在本文中&#xff0c;我们将探索七种高效的传输方法。方法 1&#xff1a;仅通过 USB 将手机视频发送到电脑许…

Pico 4 Enterprise(企业版)与Unity的交互-有线串流调试篇

入手了Pico 4 E做VR开发&#xff0c;谁知入了天坑...根据官方文档&#xff0c;尝试了串流助手、企业串流、PICO Developer Center&#xff0c;陷入了各种版本问题、环境问题的陷阱。而且Pico4E的OS自24年12开始就不再更新&#xff0c;头盔中预装的企业串流版本也较低&#xff0…

redis里多线程的应用具体在哪些场景

Redis 6.0 引入的多线程I/O&#xff0c;​特指用于处理网络数据的读取&#xff08;read&#xff09;和写入&#xff08;write&#xff09;/解析&#xff08;parse&#xff09;的并行化&#xff0c;而绝非将命令的执行&#xff08;真正的数据操作&#xff09;变成多线程。这是一…

DI-GAN:基于深度学习的动态形变多模光纤透反射光控制

DI-GAN:基于深度学习的动态形变多模光纤透反射光控制 1 论文核心概念 本文提出了一种名为 DI-GAN(Deep Imaging Generative Adversarial Network) 的持续深度学习框架,用于动态形变多模光纤(MMF) 的光场控制。该框架能够同时利用透射和反射信息,实现对光纤末端光场的实…

【深度学习新浪潮】具身智能中使用到的世界模型是什么?

在具身智能中,世界模型(World Model) 是智能体对物理环境的内在“认知地图”,它通过学习环境的动态规律(如物体运动、物理交互、因果关系等),实现对未来状态的预测、对过去状态的反推,以及对未观测状态的补全。其核心价值在于:让智能体无需频繁与真实环境交互,就能在…

Qt_UI界面的设计

一、设置UI窗口大小二、接收框只读三、下拉选项双击添加选项1是添加&#xff0c;2是调整顺序四、标签字体居中字体大小五、发送框六、按钮七、透明框&#xff08;可以放标签或图片啥的&#xff09;设置最小宽度八、水平布局九、垂直布局十、弹簧&#xff08;方便给水平垂直布局…

FTP文件传输服务

一、FTP协议、服务器FTP&#xff1a;文件传输协议&#xff08;用于网络文件双向传输的应用层协议&#xff09;特点&#xff1a;最广泛、最底层、较简单&#xff0c;但是明文传输&#xff1b;适用于较大文件的传输1.常见客户端、服务器客户端&#xff1a;WINSCP or filezilla&am…

Nginx运维之路(Docker多段构建新版本并增加第三方模块)

喜大普奔&#xff0c;前两天发现Nginx竟然自带支持了ACME功能&#xff0c;让我很想测试一下&#xff0c;但是发现手头没有资源让我测试&#xff0c;忽然我想到可以用docker来构建nginx然后测试ACME功能&#xff0c;在这个过程中发现原来官方Nginx镜像并没有集成ACME插件&#x…

DrissionPage 优化天猫店铺商品爬虫:现代化网页抓取技术详解

概述在网络数据采集领域&#xff0c;传统的爬虫方法通常面临反爬机制、动态内容加载和效率低下等挑战。本文将以天猫店铺商品爬虫为例&#xff0c;详细介绍如何从传统的 Requests 库迁移到更现代化的 DrissionPage 解决方案&#xff0c;实现更高效、稳定的数据采集。----------…

pytest并发测试,资源问题导致用例失败解决办法

遇见的问题&#xff1a; 测试用例使用thrift资源和redis资源&#xff0c;单独运行case没有问题&#xff0c;但是使用并发pytest-xdist&#xff08;-n 10 和 --distloadscope&#xff09;运行失败原因&#xff1a; 测试用例间存在共享资源竞争&#xff08;如 Redis、Thrift 连接…

C 盘又满了?6 个「零风险清理法」+5 款神器,让电脑瞬间多出 100GB 空间

你是否遇到过这样的场景&#xff1a;正在赶工写报告&#xff0c;突然弹出「C 盘存储空间不足」的警告&#xff1b;想安装新软件&#xff0c;却因为 C 盘爆红而反复失败&#xff1b;甚至电脑越来越卡&#xff0c;开机要等 5 分钟&#xff0c;打开文件夹都要转圈…… 作为系统盘…

Android 项目:画图白板APP开发(四)——笔锋(单 Path)

上一章讲解了如何通过多个 Path 叠加形成笔锋效果&#xff0c;还有另外的方式实现笔锋&#xff0c;并且只需要一条Path就可以了。在讲解具体方案之前&#xff0c;我们需要了解一个有意思的工具 PathMeasure &#xff0c;这是一个非常强大且实用的工具&#xff0c;常用于高级动画…

从C++开始的编程生活(7)——取地址运算符重载、类型转换、static成员和友元

前言 本系列文章承接C语言的学习&#xff0c;需要有C语言的基础才能学会哦~ 第7篇主要讲的是有关于C的取地址运算符重载、类型转换、static成员和友元。 C才起步&#xff0c;都很简单 目录 前言 取地址运算符重载 const成员函数 基本语法 特点 取地址运算符重载 类型转换…