【问题标题】:golang cobra subcommands without arguments matching没有参数匹配的golang cobra子命令
【发布时间】:2018-04-18 05:22:59
【问题描述】:

我想用cobra 创建golang CLI。目前,它运行良好。我创建了类似foobar create --username johndoe 的东西。但我需要像foobar create user --username johndoe 这样的子命令。有user 子命令。

我已经创建了参数匹配,

var applicationCmd = &cobra.Command{
   Use:   "application",
   Short: "Create/Read/Update application",
   Long: `You can create any user or partner.`,
   Run: (cmd *cobra.Command, args []string) {
        if len(args) < 1 {
            fmt.Printf("%sPlease choose any object that you want to change e.g (user, partner)%s\n", chalk.Red, chalk.Reset)
        }
        if stringUtil.Contains(args, "user") {
            createUser()
        }
        if stringUtil.Contains(args, "partner") {
            createPartner()
        }
   },
}

但我认为使用 cobra 比使用像这样匹配的参数有更好的方法。有什么建议吗?

【问题讨论】:

    标签: go cobra go-cobra


    【解决方案1】:

    我有点过火了;但是,是的,appCmd.Addcommand(newCmd) 就是你要找的。​​p>

    (在您发布答案之前,我已经开始着手处理此问题,但我不想废弃代码)

    package main
    
    import (
    "github.com/spf13/cobra"
    "fmt"
    )
    
    var rootCmd = &cobra.Command{
        Use:   "app",
        Run: func (cmd *cobra.Command, args []string) {
        },
    }
    
    var makeU = &cobra.Command{
        Use:   "makeU",
        Short: "makes a user",
        Long: "Prints stuff about the user. You could also use the flags in your addPartner() function",
        Run: func (cmd *cobra.Command, args []string) {
            fmt.Println("User's name: " + uName)
            fmt.Println("User's number: " + uNumber)
            fmt.Println("User's other stuff: " + uOtherStuff)
        },
    }
    
    var makeP = &cobra.Command{
        Use:   "makeP",
        Short: "makes a partner",
        Long: "Prints stuff about the partner. You could also use the flags in your addPartner() function",
        Run: func (cmd *cobra.Command, args []string) {
            fmt.Println("Partner's name: " + uName)
            fmt.Println("Partner's number: " + uNumber)
            fmt.Println("Partner's other stuff: " + uOtherStuff)
        },
    }
    
    // adds commands
    func addCommands() {
        rootCmd.AddCommand(makeU)
        rootCmd.AddCommand(makeP)
    }
    
    // adds flags
    var pName, pNumber, pOtherStuff string
    var uName, uNumber, uOtherStuff string
    func init() {
        makeU.Flags().StringVar(&uName, "username", "default", "--username=<user's name>")
        makeU.Flags().StringVar(&uNumber, "usernumber", "default", "--usernumber=<user's number>")
        makeU.Flags().StringVar(&uOtherStuff, "userother", "default", "--userother=<user's other stuff>")
        makeP.Flags().StringVar(&pName, "partnername", "default", "--partnername=<partner's name>")
        makeP.Flags().StringVar(&pNumber, "partnernumber", "default", "--partnernumber=<partner's number>")
        makeP.Flags().StringVar(&pOtherStuff, "partnerother", "default", "--partnerother=<partner's other stuff>")
    }
    
    
    func main() {
        addCommands()
        rootCmd.Execute()
    }
    

    【讨论】:

    • 是的,完全一样。谢谢!
    【解决方案2】:

    我已经解决了这个问题。只需将新的 cobra 命令添加到 applicationCmd 就像这样

    applicationCmd.AddCommand(yourNewCommand)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-05
      • 1970-01-01
      • 2022-06-14
      • 1970-01-01
      相关资源
      最近更新 更多