我使用以下代码来传递函数root, value
var cfBuild = &cobra.Command{
Use: "build",
Short: "Build",
Run: func(cmd *cobra.Command, args []string) {
root, value := Build(target)
},
PersistentPostRun: func(cmd *cobra.Command, args []string) {
//Here I need to use root, value
}
}
我可以通过使用全局变量来实现它,但在这种情况下有一种避免全局变量的好方法吗?
这是回购,我没有找到任何好办法做到这一点...... https://github.com/spf13/cobra
顺便说一句,可以使用viper
喜欢......
Run: func(cmd *cobra.Command, args []string) {
root, value := Build(target)
viper.Set("root", root)
viper.Set("value", value)
然后在另一种方法中获取它... 这是好方向吗?
答案 0 :(得分:0)
您不需要毒蛇。 只需创建2个单例(在命令文件中具有全局作用域的变量),即可将它们分配给Build函数返回。
示例
package cmd
var (
root,
value string
)
var cfBuild = &cobra.Command{
Use: "build",
Short: "Build",
Run: func(cmd *cobra.Command, args []string) {
root, value = Build(target)
},
PersistentPostRun: func(cmd *cobra.Command, args []string) {
fmt.Printf("%s, %s", root, value)
}
}