猿问

如何在 Go 中使用 Cli 访问一系列命令?

目前使用Codegangsta 的 Cli 库。我运行这样的命令:


myGoProgram arg1 arg2 arg3 --flag1 flag1arg 

跑步


app.Action = func(c *cli.Context) {

        fmt.Println("Context: ", c.Args())

}

返回:[arg1 arg2 arg3 --flag1 flag1arg](c.Args() 的返回类型)


我如何访问arg1, arg2, and arg3,但不能访问--flag1or flag1arg?我必须遍历这个数组吗?


慕盖茨4494581
浏览 173回答 2
2回答

精慕HU

好的,所以我所做的是创建两个相同内容的数组,并相应地删除元素以创建一个仅包含原始命令的数组。func noFlagCliArgs(cliArgs []string) []string {    a := cliArgs    for pos, arg := range cliArgs {        if strings.Compare(string(arg[0]), "-") == 0 {            // Cut out two to get rid of flag and its argument            a = append(a[:pos], a[pos+2:]...)        }    }    return a}

森林海

我认为您可能没有正确定义标志,请参阅我编写的这个示例:package mainimport (    "fmt"    "os"    "github.com/codegangsta/cli")func main() {    app := cli.NewApp()    app.Name = "so-example"    app.Usage = "Demonstrate CLI usage"    app.Commands = []cli.Command{        {            Name:    "one",            Usage:   "first thing",            Flags: []cli.Flag{                cli.StringFlag{                    Name:  "test",                    Value: "foobar",                    Usage: "something cool",                },            },            Action: func(c *cli.Context) {                fmt.Println("completed task", c.Command.Name, " with args ", c.Args())                if (c.String("test") != "foobar") {                    fmt.Println("Where'd foobar go?")                }            },        },        {            Name:    "two",            Usage:   "second thing",            Flags: []cli.Flag{                cli.StringFlag{                    Name:  "test",                    Value: "foobar",                    Usage: "something cool",                },            },            Action: func(c *cli.Context) {                fmt.Println("completed task", c.Command.Name, " with args ", c.Args())                fmt.Println("Testing value:", c.String("test"))                if (c.String("test") != "foobar") {                    fmt.Println("Where'd foobar go?")                }            },        },    }    app.Run(os.Args)}快速示例:无旗$ ./sandbox two foo bar hello worldcompleted task two  with args  [foo bar hello world]Testing value: foobar带旗$ ./sandbox two foo bar hello world --test "see"completed task two  with args  [foo bar hello world]Testing value: seeWhere'd foobar go?
随时随地看视频慕课网APP

相关分类

Go
我要回答