问题标签 [go-cobra]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
445 浏览

go - cobra go cli 库忽略标志

这是一个片段my-tool/cmd/root.go

代码已经从cobracli的脚手架过程中生成,即通过~/go/cobra/init my-tool --pkg-name github.com/something/my-tool

我正在尝试暂时传递config标志以检查程序是否正在处理它:

但是,尽管我希望该init()函数能够调用cobra.OnInitialize(initConfig)并解析标志,如以下行所示:

最后在if声明中看到这两条消息之一:

相反,我得到的只是根命令的help消息;这是为什么?

编辑:从我通过添加一些打印语句看到的initConfig()情况来看,从未调用过(出于某种原因),即好像cobra.OnInitialize(initConfig)什么都不做。

0 投票
1 回答
862 浏览

go - 使用 Cobra/Viper 遇到问题

我无法同时使用 Cobra 和 Viper。这就是我正在做的事情:

我正在尝试在我的子命令中检索值 options.Password (在 中添加的命令log.Cmd(&options))但是该字段没有被填充。我很确定我正确地关注 Cobra 文档:https ://github.com/spf13/cobra#create-rootcmd

0 投票
1 回答
453 浏览

go - 如何防止将负整数视为速记标志

我需要解析包含负整数的命令行参数,spf13/cobra 是首选库:

不幸的是,眼镜蛇认为这-1是一个速记标志,当然没有定义:

我已经尝试过单引号和双引号-1,结果相同。我怎样才能让 cobra 将负整数作为参数而不是标志?

0 投票
2 回答
3424 浏览

unit-testing - 如何在 go 中实现 CLI 命令的单元测试

我正在启动一个使用 spf13/cobra 的新 OSS CLI 工具。作为 golang 的新手,我很难找出单独测试命令的最佳方法。谁能给我一个如何测试命令的例子?几个警告:

  1. 你不能从你的 init 函数返回一个 cobra.Command
  2. 你不能get_test.go在 cmd 目录中......我的印象是golang的最佳实践。
  3. 我是 golang 新手,请放轻松 :sweat_smile:

如果我错了,请纠正我。

这是我要测试的 cmd:https ://github.com/sahellebusch/raider/blob/3-add-get-alerts/cmd/get.go 。

开放的想法,建议,批评,无论什么。

0 投票
1 回答
2942 浏览

go - 在 Cobra 命令行工具中,如何为不同的标志使用相同的变量?

这个 Cobra 应用程序示例https://github.com/kurtpeek/myCobraApp包含一个 Cobra 应用程序,它使用 Cobra 生成器和以下命令搭建而成:

目录结构为

config.go中,字符串变量deviceUUID被定义并绑定到该命令的标志,默认值为"configDeviceUUID"

同样,在serve.go变量deviceUUID中绑定一个本地标志:

问题是,如果我运行config命令而不deviceUUID在命令行中指定标志,它会从命令中获取默认值serve

似乎正在发生的事情是init()每个文件中的函数按字母顺序运行,最后一个运行的函数设置了标志的默认值。

我怎样才能避免这种行为?我希望设置的默认值config.go始终应用于config命令。(当然,我可以声明单独的变量,例如configDeviceUUIDand serveDeviceUUID,但这对我来说似乎有点混乱)。

0 投票
0 回答
606 浏览

go - 将变量从 cobra 命令传递给另一个

我正在开发一个启动区块链 p2p 节点的 Go 应用程序。目前,用户必须手动启动 p2p 节点并通过终端提交数据。我正在尝试添加一个 HTTP 服务器以通过 REST 从区块链添加/读取数据。问题是我正在使用 Cobra CLI 处理 p2p 节点的启动,所以当我添加另一个命令来启动 go-gin HTTP 服务器时。启动第一个 p2p 节点会返回对区块链的引用,我正在努力将该引用传递给启动 http 服务器的函数。

结构:

启动 p2p 节点的 Cobra 命令

启动 HTTP 服务器

问题是将变量nc从第一个命令传递到第二个命令。它无法返回,因为它在Init()方法内部,所以我尝试在第一个命令的包中创建一个全局变量,然后从第二个命令包中访问它,但总是nil如此,我不明白为什么(可能是范围问题)。

我尝试将这两个命令混合为一个(启动 p2p 节点和 http 服务器),使用 go 例程和通道来传递nc,但这会导致问题,因为 go 例程在后台运行,并且启动 p2p 节点需要用户交互。

有没有更好/更顺畅的方法来实现这一目标?

0 投票
0 回答
217 浏览

go - 如何链接眼镜蛇中的所有子命令

我想在眼镜蛇中执行所有子命令。有没有办法做到这一点?

认为您要创建 tcp 数据包,因此您需要使用带有标志的 tcp 命令和带有标志的 ipv4 命令。如果要创建 dns 数据包,则需要带标志的 dns 命令、带标志的 udp 命令和带标志的 ipv4 命令。

例如,

或者

所以我想在上面写的时候执行 subsub 命令和 sub 命令。但只执行最后一个命令。

0 投票
1 回答
823 浏览

go - 当文件位于文件夹中时,无法添加新的 cobra CLI 命令

我正在使用 cobra 构建 CLI。
我想创建一个名为的新命令config,该命令将位于文件config.go和文件夹内的文件proxy中。

这是结构:

我用 cobra 创建了命令:

它在下面创建了文件cmd,我将文件移动到文件proxy夹下(如上面的结构中所示)。

问题是没有添加命令。
这是config.go代码:

它构建成功,但我在运行时看不到命令MyProj.exe -h​​。
我做错了什么吗?

0 投票
0 回答
159 浏览

go-cobra - 根据 flag 指定的目录动态创建 cobra 命令

我们已经根据当前目录上下文动态添加了 cobra 命令(在 init() 中添加它们)。如果目录中有某些东西可用,则会添加命令。

现在需要使用一个标志来决定在哪个目录中操作。但是我们总是在 init() 中添加标志和命令,并且标志没有得到及时处理以使用它们来创建命令。

所以这个想法ddev -r /Users/rfay/workspace/one可能会显示一组不同的命令,而不是ddev -r /Users/rfay/workspace/two. 命令生成如何受到已经处理的标志的影响?

0 投票
0 回答
2234 浏览

go - 如何在 golang 中设置 cobra 和 viper 以进行测试配置

我们有一个我们正在启动的二进制文件,它有几个子命令,全部设置为cobra. 我们想viper用于配置。所以这个的初始化是根据文档设置的:

我的问题是initConfig

它在里面运行init,它在我的子命令包中——所以我的子命令测试也将运行它init

麻烦的是它会寻找home文件夹,当然可能会弄乱现有的配置。换句话说,我不想要这个进行测试,我想要一个干净的测试目录。

我怎样才能做到这一点?由于标志和配置的早期初始化,它必须在内部运行init,我无法找到替代方案。