无法获取标志值

时间:2019-07-24 11:13:40

标签: go go-cobra

我使用https://github.com/spf13/cobra库创建了一个小型Go应用程序。

我创建了一个新标记-t--token,当我传递此参数时,我希望应用程序将其打印出来。

这就是我所做的:

func init() {
    fmt.Println("[*] Inside init()")
    var token string
    rootCmd.PersistentFlags().StringVarP(&token, "token", "t", "", "Service account Token (JWT) to insert")
    fmt.Println(token)
}  

但是当我这样运行应用程序时,它不会打印出来:

.\consoleplay.exe --token "hello.token"  

如何打印标志的值。

1 个答案:

答案 0 :(得分:0)

您无法在init()函数中打印token的值,因为init()函数是在首次调用该程序包时在运行时执行的。该值尚未分配。

因此,您必须全局声明变量,并在Run命令的rootCmd方法中使用它。

var token string

var rootCmd = &cobra.Command{
    Use:    "consoleplay",
    Run: func(cmd *cobra.Command, args []string) {
        fmt.Println(token)
    },
}

func init() {
    rootCmd.Flags().StringVarP(&token, "token", "t", "", "usage")
}