go - 无法将命令行分配给 Go 中的变量参数

标签 go command-line-interface

使用的包:gopkg.in/urfave/cli.v1

代码片段:

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

    author := "anonymous"
    filename := "Image"
    if c.NArg() > 0 {
        author = c.Args().Get(1)
        filename = c.Args().Get(2)
    }
}

我在 if 语句之后调用了一个使用作者和文件名的函数,但结果是作者和文件名具有它们的初始值(匿名和图像),而不是使用上述函数的命令行参数中的初始值。

我是新手,查看了软件包的文档,但找不到解决方案。

如果我这样做:

author:=c.Args().Get(1)
filename:=c.Args().Get(2)

然后该函数返回空白字符串并将它们初始化为两个变量

我给出的命令是这样的:

terminal -q "hi" -a "Eklavya" -f "Eklavya"

最佳答案

您的代码有点不完整,但您可能已经定义了标志 qaf

c.Args().Get() 仅适用于未作为标志传递的参数。例如电话

terminal hi Eklavya Eklavya

定义了参数 0、1 和 2。

要访问标志,必须使用其他函数。以下更改有效:

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

    author := "anonymous"
    filename := "Image"
    if len(c.GlobalFlagNames()) > 0 {
        author = c.String("a")
        filename = c.String("f")
    }
}

关于go - 无法将命令行分配给 Go 中的变量参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48821895/

相关文章:

node.js - 是否有用于从 node.js 中的命令行获取用户输入的模块?

hadoop - 从命令行获取 oozie sqoop 操作的日志

python - python中tty的非打印输出?

go - 在 wg.wait() 完成后停止请求输入的选项

go - golang 中的方法可用性

go - go中使用sleep时会执行哪个goroutine?

concurrency - Go channel 中发送者的排序

terminal - 如何在终端中只打印出 eslint 错误的数量?

C#/命令行界面 : Destructor not called if Dispose() used in it

go - 合并排序计数器 slice