gpt4 book ai didi

go - 如何将其他程序包中定义的标志合并到cobra.flags中?

转载 作者:行者123 更新时间:2023-12-01 21:12:19 27 4
gpt4 key购买 nike

sig.k8s.io/controller-runtime/pkg/client/config/config.go中的一些定义:

var (
kubeconfig, apiServerURL string
)

func init() {
flag.StringVar(&kubeconfig, "kubeconfig", "",
"Paths to a kubeconfig. Only required if out-of-cluster.")
}
我的项目,与眼镜蛇,mybinary
var rootCmd = &cobra.Command{
Use: "mybinary",
Run: func(cmd *cobra.Command, args []string) {
somefunc()
}
}
func init() {
rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file")
rootCmd.InitDefaultHelpFlag()
}
如果我想使用 mybinary --kubeconfig somevalue设置在 kubeconfig上定义的参数 config.go,该怎么办?

最佳答案

您有多种选择,但我认为目前最好的选择是使用眼镜蛇的PersistentPreRun函数:

var rootCmd = &cobra.Command{
// ...
PersistentPreRun: func(cmd *cobra.Command, args []string) {
flag.CommandLine.Parse([]string{"-kubeconfig", yourVariableHere})
},
// ...
}
也就是说,在您的root命令或任何从其衍生的命令运行之前(假设它们不覆盖PreRun),您将调用等效于调用 flag.Parse()的命令,就好像有人在运行该命令一样:
your-program -kubeconfig <string>
该值来自提供给您自己的Cobra标志的参数。如果正确的话,可以使用 cfgFile参数,或者添加 --kubeconfig变量。
如果您使用的是 viper,它似乎有自己的胶水可以与基本 flag库混合使用,但是我尚未对此进行调查。我确实在 config.go中看到了以下评论:
// TODO: Fix this to allow double vendoring this library but still register flags on behalf of users
如果固定的话,它将提供除调用 flag.CommandLine.Parse之外的其他方法。

关于go - 如何将其他程序包中定义的标志合并到cobra.flags中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64023424/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com