golang Cobra 快速使用

Go 复制代码
package main

import(
	"fmt"
	"os"
	"github.com/spf13/cobra"
)

func f1(){
  fmt.Printf("这是主命令的运行函数 ")
}
func f2(){
	fmt.Println("这是一个子命令的运行函数")
}


func main(){



	var rootCmd = &cobra.Command{
		Use: "myapp",
		Short:"一个主CLI程序帮助",
		Long: "这是一个Cobr构建的主CLi帮助信息",
		Run: func(cmd *cobra.Command, args []string){
		
			f1()
		}, 
	}

		var subCmd  = &cobra.Command{
		Use: "subcommand",  //myapp 主CLI -h时候打印的内容
		Short:"这是一个子命令帮助信息",
		Long: "这是一个Cobra 构建的子CLI应用程序帮助信息", //
		Run: func(cmd *cobra.Command, args []string){
		  f2()
		}, 
	}

     //子命令添加到主命令里
	 rootCmd.AddCommand(subCmd)

      //打印错误
	  err := rootCmd.Execute()
	  if err != nil {
       os.Exit(1)
	 fmt.Println(err)
	}
}

添加 Flag 传值

Go 复制代码
package main

import (
	"fmt"
	"github.com/spf13/cobra"
	"os"
)



func main() {

	var greeting string
	var verbose bool

	var rootCmd = &cobra.Command{
		Use:   "myapp",
		Short: "一个主CLI程序帮助",
		Long:  "这是一个Cobr构建的主CLi帮助信息",
		Run: func(cmd *cobra.Command, args []string) {
			fmt.Printf("这是主命令的运行函数,gretting=%s,verbose=%v\n", greeting, verbose)

		},
	}
  
	rootCmd.PersistentFlags().StringVarP(&greeting, "gretting", "g", "Hello", "欢迎词")
	rootCmd.PersistentFlags().BoolVarP(&verbose, "verbose", "v", false, "详细模式")

	var subCmd = &cobra.Command{
		Use:   "subcommand",
		Short: "这是一个子命令帮助信息",
		Long:  "这是一个Cobra 构建的子CLI应用程序帮助信息",
		Run: func(cmd *cobra.Command, args []string) {
			fmt.Println("这是一个子命令的运行函数,gretting=%s,verbose=%v\n", greeting, verbose)
		},
	}
	rootCmd.AddCommand(subCmd)

	err := rootCmd.Execute()
	if err != nil {
		os.Exit(1)
		// fmt.Println(err)
	}
}

添加参数传值

Go 复制代码
package main

import (
	"fmt"
	"github.com/spf13/cobra"
	"os"
)



func main() {

	
	var rootCmd = &cobra.Command{
		Use:   "myapp",
		Short: "一个主CLI程序帮助",
		Long:  "这是一个Cobr构建的主CLi帮助信息",
		Run: func(cmd *cobra.Command, args []string) {
	  fmt.Printf("欢迎使用 myapp:参数 %v\n",args)  //args是切片,可以用args[0]取出第一个参数

		},
	}
  
	// rootCmd.PersistentFlags().StringVarP(&greeting, "gretting", "g", "Hello", "欢迎词")
	// rootCmd.PersistentFlags().BoolVarP(&verbose, "verbose", "v", false, "详细模式")


	err := rootCmd.Execute()
	if err != nil {
		os.Exit(1)
		// fmt.Println(err)
	}
}
相关推荐
用户1474853079741 小时前
CodeX使用Skill生成游戏美术和音乐资源,一分钟入门
后端
Melody1231 小时前
用 abort 中断 AI 流式请求,我之前做错了
后端
onething3651 小时前
Spring Boot + Spring AI 从入门到实战:7天转型计划 Day 5 —— SSE 流式输出 + 打字机效果
人工智能·后端·全栈
一个做软件开发的牛马2 小时前
MyBatis-Plus 从零实战:完整搭建可运行 Demo,BaseMapper 零 SQL、Wrapper 条件构造、分页插件与代码生成器详解
java·后端
码事漫谈2 小时前
AI 编程的「三体」架构:OpenSpec + Superpowers + GStack 如何让一个开发者撑起整个研发团队
后端
吃饱了得干活2 小时前
深入解析 OpenFeign:从重试、拦截到负载均衡的全维度实践
后端
onething3652 小时前
Spring Boot + Spring AI 从入门到实战:7天转型计划 Day 6 —— 业务完善 + 会话消息预览
人工智能·后端·全栈
BingoGo2 小时前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
JaguarJack2 小时前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
IT_陈寒2 小时前
SpringBoot自动配置的坑,我爬了三天才出来
前端·人工智能·后端