如何从命令对象传递参数

时间:2018-04-23 11:37:18

标签: go

我使用以下代码来传递函数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)

然后在另一种方法中获取它... 这是好方向吗?

1 个答案:

答案 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)
   } 
}