美文网首页
golang编程cobra-cli库使用

golang编程cobra-cli库使用

作者: MakerInChina | 来源:发表于2021-07-14 07:24 被阅读0次

    1、准备

    1.1 资源和文档
    1.2 下载

    使用 go get命令下载:

    go get -u github.com/spf13/cobra
    

    2、使用

    2.1 基本使用
    • 在工程中新建cmd文件夹,并添加root命令:在cmd文件夹下新建root.go文件,内容如下:
    package cmd
    
    import (
        "fmt"
        "github.com/spf13/cobra"
        "os"
    )
    
    var rootCmd = &cobra.Command{
        Use: "CobraExample",
        Short: "cobra use example",
        Long: `An application show how to use cobra library.
    Author:roc
    Blog:makerinchina.cn`,
    
    }
    
    func Excute() {
        if err:= rootCmd.Execute(); err!=nil {
            fmt.Println(err)
            os.Exit(1)
        }
    }
    
    • 然后在main函数中执行,main.go 文件内容如下:
    package main
    
    import "cli_cobra_example/cmd"
    
    func main() {
        cmd.Excute()
    }
    
    
    • 测试

    执行 go build,编译程序,然后执行可以看到如下输出:

    An application show how to use cobra library.
    Author:roc
    Blog:makerinchina.cn
    
    2.2 添加自己的命令

    有了第一步的基础后,我们可以添加自己的命令,这里添加一个test命令,执行后输出test提示。

    • 先在cmd文件夹下新建test.go 文件,内容如下:
    package cmd
    
    import (
        "fmt"
        "github.com/spf13/cobra"
    )
    
    var testCmd = &cobra.Command{
        Use: "testCmd",
        Short: "A test cmd",
        Run: testCmdFunc,
    }
    
    func testCmdFunc(cmd *cobra.Command, args []string) {
        fmt.Println("test cmd function execute.")
    
        if len(args) > 0 {
            i := 0
            for i=0;i<len(args);i++ {
    
                fmt.Printf("  args[%d]:%s\r\n", i, args[i])
    
            }
    
        }
    }
    
    func init() {
        rootCmd.AddCommand(testCmd)
    }
    

    此时编译后执行程序输出如下:

    An application show how to use cobra library.
    Author:roc
    Blog:makerinchina.cn
    
    Usage:
      CobraExample [command]
    
    Available Commands:
      help        Help about any command
      testCmd     A test cmd
    
    Flags:
      -h, --help   help for CobraExample
    
    Use "CobraExample [command] --help" for more information about a command.
    
    

    如果执行程序带上命令和参数: app testCmd arg1 arg2, 则输出如下:

    test cmd function execute.
      args[0]:arg1
      args[1]:arg2
    
    
    2.3 使用命令标志Flags

    (1) 全局命令标志

    这种标志定义后会作用于定义它的命令和它的子命令。

    • 在root.go文件添加flags:
    package cmd
    
    import (
        "fmt"
        "github.com/spf13/cobra"
        "os"
    )
    
    var rootCmd = &cobra.Command{
        Use: "CobraExample",
        Short: "cobra use example",
        Long: `An application show how to use cobra library.
    Author:roc
    Blog:makerinchina.cn`,
        Run: func(cmd *cobra.Command, args []string) {
            fmt.Println("root cmd execute function.")
    
    
        },
    }
    
    var flags1 string
    
    func init() {
        rootCmd.PersistentFlags().StringVarP(&flags1,"flags1","f","default value","flag defined in rootcmd.")
    }
    
    func Excute() {
        if err:= rootCmd.Execute(); err!=nil {
            fmt.Println(err)
            os.Exit(1)
        }
    }
    

    执行程序并带 -h 参数输出如下:

    An application show how to use cobra library.
    Author:roc
    Blog:makerinchina.cn
    
    Usage:
      CobraExample [flags]
      CobraExample [command]
    
    Available Commands:
      help        Help about any command
      testCmd     A test cmd
    
    Flags:
      -f, --flags1 string   flag defined in rootcmd. (default "default value")
      -h, --help            help for CobraExample
    
    Use "CobraExample [command] --help" for more information about a command.
    
    

    然后执行程序并带子命令参数: app testCmd -h,也会有-f的标志,输出如下:

    A test cmd
    
    Usage:
      CobraExample testCmd [flags]
    
    Flags:
      -h, --help   help for testCmd
    
    Global Flags:
      -f, --flags1 string   flag defined in rootcmd. (default "default value")
    

    (2) 特定命令标志

    这种标志仅仅用于定义它的命令。

    • 修改test.go文件如下:
    package cmd
    
    import (
        "fmt"
        "github.com/spf13/cobra"
    )
    
    var testCmd = &cobra.Command{
        Use: "testCmd",
        Short: "A test cmd",
        Run: testCmdFunc,
    }
    
    var testFlag1 string
    
    func testCmdFunc(cmd *cobra.Command, args []string) {
        fmt.Println("test cmd function execute.")
    
        if len(args) > 0 {
            i := 0
            for i=0;i<len(args);i++ {
    
                fmt.Printf("  args[%d]:%s\r\n", i, args[i])
    
            }
    
        }
    
        strflag, _ := cmd.Flags().GetString("testflag")
        fmt.Println("local cmd flags:", strflag)
    
        strflagroot, _ := rootCmd.Flags().GetString("flags1")
        fmt.Println("root cmd flags:", strflagroot)
    }
    
    func init() {
        rootCmd.AddCommand(testCmd)
    
        testCmd.Flags().StringVarP(&testFlag1,"testflag","t","default value1", "test cmd flag1")
    }
    
    • 执行子命令 testCmd:
    app testCmd -h 
    

    可以看到输出如下:

    A test cmd
    
    Usage:
      CobraExample testCmd [flags]
    
    Flags:
      -h, --help              help for testCmd
      -t, --testflag string   test cmd flag1 (default "default value1")
    
    Global Flags:
      -f, --flags1 string   flag defined in rootcmd. (default "default value")
    
    • 执行命令并输出标志参数:
    app  testCmd arg1 -f global_flag -t local_flag
    

    输出结果如下:

    test cmd function execute.
      args[0]:arg1
    local cmd flags: local_flag
    root cmd flags: global_flag
    

    相关文章

      网友评论

          本文标题:golang编程cobra-cli库使用

          本文链接:https://www.haomeiwen.com/subject/dqwepltx.html