cobra flags

添加Flags

1. Persistent Flags

Persistent Flags表示该类参数可以被用于当前命令及其子命令。

例如,以下表示verbose参数可以被用于rootCmd及其子命令。

rootCmd.PersistentFlags().BoolVarP(&Verbose, "verbose", "v", false, "verbose output")

2. Local Flags

Local Flags表示该类参数只能用于当前命令。

例如,以下表示source只能用于localCmd这个命令,不能用于其子命令。

localCmd.Flags().StringVarP(&Source, "source", "s", "", "Source directory to read from")

3. Local Flag on Parent Commands

cobra默认只解析当前命令的local flags,通过开启Command.TraverseChildren参数,可以解析每个命令的local flags。

command := cobra.Command{
  Use: "print [OPTIONS] [COMMANDS]",
  TraverseChildren: true,
}

4. Bind Flags with Config

可以通过 viper来绑定flags。

var author string

func init() {
  rootCmd.PersistentFlags().StringVar(&author, "author", "YOUR NAME", "Author name for copyright attribution")
  viper.BindPFlag("author", rootCmd.PersistentFlags().Lookup("author"))
}

更多参考: viper documentation

5. Required flags

默认添加的flags的可选参数,如果需要在二进制运行时添加必要参数,即当该参数没指定时会报错。可使用以下设置。

rootCmd.Flags().StringVarP(&Region, "region", "r", "", "AWS region (required)")
rootCmd.MarkFlagRequired("region")

参考:


最后修改 May 10, 2023: add code (7f583d9)