go - 获取标志值失败
问题描述
我使用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()
函数在第一次调用包时在运行时执行。该值尚未分配。
因此,您必须全局声明变量并在命令的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")
}
推荐阅读
- python - 将代码转换为python中的列表理解
- c - 在 C 中将一个数组内存映射到另一个数组
- javascript - Redux Store 订阅未触发
- javascript - fs.mkdir() 和 fs.writeFile() 在 Glitch 托管中不起作用
- r - 如何使用 tidyverse 插入位于指定范围之间且不存在于感兴趣列中的值
- flask - Heroku:为亚马逊 mturk 缩放——这可行吗?什么形式
- ruby-on-rails - 如何在rails中为json呈现不同的根
- python - 无法理解python代码的功能
- redirect - 如何从 MarineTraffic 刮掉船只
- macos - Mac OS High Sierra diskutil eraseDisk 导致错误:-69877:无法打开设备