我用 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"
如何打印标志的值。
不能init()
函数中打印 token 的值,因为首次调用包时,init()
函数在运行时执行。尚未分配该值。
因此,您必须全局声明变量并在 rootCmd
命令的 Run
方法中使用它。
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")
}