【问题标题】:Catch Command flags variable with codegangsta/cli使用 codegangsta/cli 捕获命令标志变量
【发布时间】:2017-06-10 11:38:09
【问题描述】:

我尝试用 Go 编写我的第一个 CLI 应用程序。

我使用 codegangsta/cli 作为结构。

我的问题:

我有一些命令:

Add  --name 

Show --all

Delete  --force

从文件 /commands/add.go 我无法从 /commands.go 中获取变量 StackName,如下所示:

package main
var StackName string
var Commands = []cli.Command{
{
    Name:   "add",
    Usage:  "",
    Action: command.CmdAdd,

    Flags:  []cli.Flag{
        cli.StringFlag{
            Name: "name, n",
            Value: "default",
            Usage: "Stack name",
            Destination: &StackName,
        },

在我的 add.go 文件中,我尝试获取 $stackName 但我不知道如何执行此操作:

package command

func CmdAdd(c *cli.Context) {
    fmt.PrintF(StackName)
}

我得到了这个:command/add.go:25: undefined: StackName

感谢帮助找出我错的地方。

【问题讨论】:

  • 我不太了解“codegangsta/cli”及其工作方式,但您在“package main”中声明变量并希望在“package command”中访问它。

标签: go command-line-interface undefined


【解决方案1】:

您的文件层次结构是什么样的?因为你可能需要导入 commands.go 文件import "github.com/YourGithubName/YourDirectory/commands"。我这样说是因为你试图在命令包中调用主包中声明的变量。

【讨论】:

  • 嗨 Ethan,这是我的代码 github.com/valentin2105/kubeStacker 我尝试从 commands/add.go 文件中的 'commands.go' 获取一个变量,但我没有工作,因为它们不使用相同的包'主要'。
  • 在 add.go 文件中,由于您尝试使用另一个包中的变量,只需将 import "github.com/valentin2105/kubeStacker" 添加到 add.go 文件中。还是你想反其道而行之?
  • 我已经尝试过这个解决方案,但我在 go build 过程中遇到了这个错误:` import "github.com/valentin2105/kubeStacker" is a program, not an importable package` 我只想使用来自commands.go的全局变量StackName,但没有找到如何..
  • 是的,并且由于 StackName 在 github.com/valentin2105/kubeStacker 的主包中,您必须导入它。将 /main 添加到导入的末尾,因为包名正确吗?
  • 这似乎不是正确的做法:找不到包“github.com/valentin2105/kubeStacker/main”找不到包“github.com/valentin2105/kubeStacker/main.go”(我已经使用github.com/tcnksm/gcli.git 创建骨架)。谢谢:)
猜你喜欢
  • 1970-01-01
  • 2021-07-12
  • 2020-08-20
  • 2020-03-24
  • 1970-01-01
  • 1970-01-01
  • 2018-02-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多