问题标签 [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 投票
2 回答
222 浏览

go - 如何将数据库连接传递给所有 cobra 命令?

所以我创建了一个眼镜蛇命令

可以看到里面的数据库连接代码。现在我必须在所有命令中添加相同的数据库连接代码。有没有办法避免这种情况?

0 投票
1 回答
3111 浏览

go - 使用 Cobra 验证标志

下面的草图是一个使用 Cobra 和 Go 编写的命令行应用程序。flag1如果 的值与 regex 不匹配,我想抛出一个错误^\s+\/\s+。我怎么做?

0 投票
1 回答
503 浏览

powershell - 如何将空间传递给 Cobra CLI 字符串切片标志?

我正在使用 Pflag 库中的StringSliceP接受字符串列表作为 CLI 参数。

我正在从 Windows 命令提示符调用 Go 应用程序。

我希望列表的某些字符串包含 ( ") 双引号字符,但我无法做到这一点。

转义引号不起作用:

预期结果:[]string{"a\"b", "c", "d", "e"}

实际结果:Error: invalid argument "a\"\\b,c,d,e" for "--string-slice-list" flag: parse error on line 1, column 1: bare " in non-quoted-field

加倍引号不起作用:

预期结果:[]string{"a\"b", "c", "d", "e"}

实际结果:Error: invalid argument "a\"b,c,d,e" for "--string-slice-list" flag: parse error on line 1, column 1: bare " in non-quoted-field

0 投票
0 回答
38 浏览

http - 如何使用频道保持实时服务器命令

我正在使用 gorilla/mux 为我的 go 应用程序提供服务。为了让 http 服务器保持实时状态,我在我的服务器命令中使用了类似的通道,如下所示。

在 runServer 内部:

我正在尝试为自动监视我的更改实现空气并再次重新编译并运行服务器命令。

问题是当 air 重新运行服务器命令时,由于通道仍处于活动状态,服务器给出端口已经使用错误。有什么方法可以杀死来自 cmd 的信号并再次运行,或者有其他方法可以杀死端口并再次运行吗?

0 投票
0 回答
30 浏览

go - 如何将两个 Cobra CLI 合二为一?

我对 CLI A 有以下命令(请参阅真实存储库):

而且,对于 CLI B,我有以下命令(请参阅真实存储库):

我现在想要做的是,我希望 CLI B(及其所有子命令)成为 CLI A 的子命令,如下所示:

所以当用户运行时$ cli-a cli-b -h,他们会看到:

两个存储库都位于不同的 Go 模块名称/存储库中。如果用户不喜欢下载和使用 CLI A 中的所有功能,我仍然想为他们提供 CLI B 下载。

CLI B 的大部分工作(功能、错误修复等)将在 CLI B 存储库中完成,我正在考虑在我的 CLI A 的 CI 管道中组合/合并它们两个(也需要考虑如何做到这一点)。

如果可能,我不想在每次更改 CLI B 代码库(业务逻辑、CLI 标志等)时更改/更新 CLI A 代码库中的任何内容。我希望 CLI A 就像 CLI B 的代理服务器一样(我在这里使用一个类比)——所有业务逻辑都保存在 CLI B 代码库中。

而且,如果您仔细查看上面的示例输出,当用户运行$ cli-a cli-b -hor时$ cli-a cli-b command-bN [-h],我不希望 CLI A 的根标志 ( --config) 出现并生效。相反,我希望 CLI B 的根标志 ( --kubeconfig) 出现并生效。

问题

  1. 这对 Cobra 可行吗?
  2. 在 CLI A 的存储库中不添加太多代码的情况下实现此目的的最佳方法是什么?
  3. 项目结构/树应该是什么样子?
  4. 有什么好的例子可以参考吗?
  5. 在高层次上,我应该在 CLI A 的构建/CI 管道中做什么来实现这一点?

我非常感谢这里的所有输入、指针、示例和外部资源。先感谢您。

0 投票
3 回答
634 浏览

go - 为什么我会根据调用 BindPFlag 的位置收到零指针错误?

我最近才开始使用 Go,并且在使用 Cobra 和 Viper 时遇到了一些我不确定我是否理解的行为。

这是您通过运行获得的示例代码的略微修改版本cobra init。在main.go我有:

cmd/root.go我有:

此代码将在最终调用时出现 nil 指针引用恐慌 fmt.Printf

如果我将调用config.BindPFlagNewCmdRoot 函数移到命令的顶部initConfig,一切运行都没有问题。

这里发生了什么?根据有关使用的 Viper 文档 BindPFlags

和 BindEnv 一样,值不是在调用绑定方法时设置,而是在访问时设置。这意味着您可以尽可能早地绑定,即使在 init() 函数中也是如此。

这几乎正​​是我在这里所做的。在我打电话的时候 config.BindPflagconfig是非零,cmd是非零,并且 name参数已经被注册。

config我认为我在 in 的闭包中使用了一些事情PersistentPreRun,但我不知道为什么会导致这个失败。

0 投票
2 回答
698 浏览

go - 如何在 cobra cli 中将命令状态传递给 Postrun

Cobra CLI 支持在执行命令后调用 PostRun。

https://github.com/spf13/cobra#prerun-and-postrun-hooks

如何将命令状态传递给 PostRun 调用?我需要在命令执行后将命令状态发布到服务器

0 投票
1 回答
46 浏览

go - 如何使用 cobra 实现多个选项

我试试这个: projCmd.Flags().StringVarP(&flag, "type", "t", flag, "help")

但是,如何使用 cobra 实现多个选项,如下所示: mycli new -t one -n two

0 投票
1 回答
444 浏览

go - 如果“cobra.Command BoolVarP”的默认值为“true”,则始终为“true”

我的代码

如果默认值为“true”,天气我是否添加“-r”,“require”始终为“true”。但如果默认值为“false”,则效果很好。

请帮忙,谢谢!

0 投票
1 回答
416 浏览

go - 如何使用 Cobra 和 Viper 将值绑定为配置中数组的第一项?

我有以下配置模型:

我希望能够使用配置文件以及命令行上的选项来配置它。我知道如何通过以正确的格式传递配置文件然后解组它来完成配置文件。

但是,我无法弄清楚如何使用 Cobra 在命令行上设置项目名称,然后让 Viper 将该值绑定为项目数组中的第一项。

以下是我整理的一个简单程序,以显示我遇到的问题:

当我使用命令运行它时,go run .\binding.go -n Russell -p Turtle我得到以下输出:

虚拟应用程序输出

所以我知道这条线viper.BindPFlag("project.0.name", rootCmd.Flags().Lookup(("project")))不工作。如果我将其更改为project[0].name我会得到一个堆栈跟踪。问题是如何将此(和其他属性)添加为复杂对象数组中的第一项?我可以有第二个 Viper 读入另一个对象,然后添加到主配置中,还是有其他方法?