Go基础(③Cobra)

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

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

todo add "买牛奶" → 添加待办

todo list → 查看所有待办

todo done 1 → 标记第 1 个待办为已完成

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

用 Cobra 的话,你只需要:

定义 add、list、done 这三个子命令

给每个命令写好具体执行逻辑

剩下的「解析用户输入」「判断执行哪个命令」「生成帮助信息(如 todo --help)」这些事,Cobra 全帮你做了

创建项目

bash 复制代码
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

初始化后,项目结构如下

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

add.go代码

Go 复制代码
package cmd

import (
	"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 复制代码
go build -o calc.exe

123

相关推荐
JQLvopkk24 分钟前
C# 轻量级工业温湿度监控系统(含数据库与源码)
开发语言·数据库·c#
忧郁的Mr.Li31 分钟前
SpringBoot中实现多数据源配置
java·spring boot·后端
玄同76537 分钟前
从 0 到 1:用 Python 开发 MCP 工具,让 AI 智能体拥有 “超能力”
开发语言·人工智能·python·agent·ai编程·mcp·trae
czy878747539 分钟前
深入了解 C++ 中的 `std::bind` 函数
开发语言·c++
消失的旧时光-194343 分钟前
从 Kotlin 到 Dart:为什么 sealed 是处理「多种返回结果」的最佳方式?
android·开发语言·flutter·架构·kotlin·sealed
yq19820430115644 分钟前
静思书屋:基于Java Web技术栈构建高性能图书信息平台实践
java·开发语言·前端
一个public的class1 小时前
你在浏览器输入一个网址,到底发生了什么?
java·开发语言·javascript
Jinkxs1 小时前
Gradle - 与Groovy/Kotlin DSL对比 构建脚本语言选择指南
android·开发语言·kotlin
&有梦想的咸鱼&1 小时前
Kotlin委托机制的底层实现深度解析(74)
android·开发语言·kotlin
暮色妖娆丶1 小时前
SpringBoot 启动流程源码分析 ~ 它其实不复杂
spring boot·后端·spring