问题标签 [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.
go - cobra go cli 库忽略标志
这是一个片段my-tool/cmd/root.go
代码已经从cobra
cli的脚手架过程中生成,即通过~/go/cobra/init my-tool --pkg-name github.com/something/my-tool
我正在尝试暂时传递config
标志以检查程序是否正在处理它:
但是,尽管我希望该init()
函数能够调用cobra.OnInitialize(initConfig)
并解析标志,如以下行所示:
最后在if
声明中看到这两条消息之一:
相反,我得到的只是根命令的help
消息;这是为什么?
编辑:从我通过添加一些打印语句看到的initConfig()
情况来看,从未调用过(出于某种原因),即好像cobra.OnInitialize(initConfig)
什么都不做。
go - 使用 Cobra/Viper 遇到问题
我无法同时使用 Cobra 和 Viper。这就是我正在做的事情:
我正在尝试在我的子命令中检索值 options.Password (在 中添加的命令log.Cmd(&options)
)但是该字段没有被填充。我很确定我正确地关注 Cobra 文档:https ://github.com/spf13/cobra#create-rootcmd
go - 如何防止将负整数视为速记标志
我需要解析包含负整数的命令行参数,spf13/cobra 是首选库:
不幸的是,眼镜蛇认为这-1
是一个速记标志,当然没有定义:
我已经尝试过单引号和双引号-1
,结果相同。我怎样才能让 cobra 将负整数作为参数而不是标志?
unit-testing - 如何在 go 中实现 CLI 命令的单元测试
我正在启动一个使用 spf13/cobra 的新 OSS CLI 工具。作为 golang 的新手,我很难找出单独测试命令的最佳方法。谁能给我一个如何测试命令的例子?几个警告:
- 你不能从你的 init 函数返回一个 cobra.Command
- 你不能
get_test.go
在 cmd 目录中......我的印象是golang的最佳实践。 - 我是 golang 新手,请放轻松 :sweat_smile:
如果我错了,请纠正我。
这是我要测试的 cmd:https ://github.com/sahellebusch/raider/blob/3-add-get-alerts/cmd/get.go 。
开放的想法,建议,批评,无论什么。
go - 在 Cobra 命令行工具中,如何为不同的标志使用相同的变量?
这个 Cobra 应用程序示例https://github.com/kurtpeek/myCobraApp包含一个 Cobra 应用程序,它使用 Cobra 生成器和以下命令搭建而成:
目录结构为
在config.go
中,字符串变量deviceUUID
被定义并绑定到该命令的标志,默认值为"configDeviceUUID"
:
同样,在serve.go
变量deviceUUID
中绑定一个本地标志:
问题是,如果我运行config
命令而不deviceUUID
在命令行中指定标志,它会从命令中获取默认值serve
:
似乎正在发生的事情是init()
每个文件中的函数按字母顺序运行,最后一个运行的函数设置了标志的默认值。
我怎样才能避免这种行为?我希望设置的默认值config.go
始终应用于config
命令。(当然,我可以声明单独的变量,例如configDeviceUUID
and serveDeviceUUID
,但这对我来说似乎有点混乱)。
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 节点需要用户交互。
有没有更好/更顺畅的方法来实现这一目标?
go - 如何链接眼镜蛇中的所有子命令
我想在眼镜蛇中执行所有子命令。有没有办法做到这一点?
认为您要创建 tcp 数据包,因此您需要使用带有标志的 tcp 命令和带有标志的 ipv4 命令。如果要创建 dns 数据包,则需要带标志的 dns 命令、带标志的 udp 命令和带标志的 ipv4 命令。
例如,
或者
所以我想在上面写的时候执行 subsub 命令和 sub 命令。但只执行最后一个命令。
go - 当文件位于文件夹中时,无法添加新的 cobra CLI 命令
我正在使用 cobra 构建 CLI。
我想创建一个名为的新命令config
,该命令将位于文件config.go
和文件夹内的文件proxy
中。
这是结构:
我用 cobra 创建了命令:
它在下面创建了文件cmd
,我将文件移动到文件proxy
夹下(如上面的结构中所示)。
问题是没有添加命令。
这是config.go
代码:
它构建成功,但我在运行时看不到命令MyProj.exe -h
。
我做错了什么吗?
go-cobra - 根据 flag 指定的目录动态创建 cobra 命令
我们已经根据当前目录上下文动态添加了 cobra 命令(在 init() 中添加它们)。如果目录中有某些东西可用,则会添加命令。
现在需要使用一个标志来决定在哪个目录中操作。但是我们总是在 init() 中添加标志和命令,并且标志没有得到及时处理以使用它们来创建命令。
所以这个想法ddev -r /Users/rfay/workspace/one
可能会显示一组不同的命令,而不是ddev -r /Users/rfay/workspace/two
. 命令生成如何受到已经处理的标志的影响?
go - 如何在 golang 中设置 cobra 和 viper 以进行测试配置
我们有一个我们正在启动的二进制文件,它有几个子命令,全部设置为cobra
. 我们想viper
用于配置。所以这个的初始化是根据文档设置的:
我的问题是initConfig
:
它在里面运行init
,它在我的子命令包中——所以我的子命令测试也将运行它init
。
麻烦的是它会寻找home
文件夹,当然可能会弄乱现有的配置。换句话说,我不想要这个进行测试,我想要一个干净的测试目录。
我怎样才能做到这一点?由于标志和配置的早期初始化,它必须在内部运行init
,我无法找到替代方案。