为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕盖茨4494581 2021-11-29 16:57:10
目前使用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?我必须遍历这个数组吗?
查看完整描述

2 回答

?
精慕HU

TA贡献1845条经验 获得超8个赞

好的,所以我所做的是创建两个相同内容的数组,并相应地删除元素以创建一个仅包含原始命令的数组。


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

}


查看完整回答
反对 回复 2021-11-29
?
森林海

TA贡献2011条经验 获得超2个赞

我认为您可能没有正确定义标志,请参阅我编写的这个示例:


package main


import (

    "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 world

completed 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: see

Where'd foobar go?


查看完整回答
反对 回复 2021-11-29
  • 2 回答
  • 0 关注
  • 172 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信