cobra flags

Posted by 胡伟煌 on 2020-09-16

添加Flags

1. Persistent Flags

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

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

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

2. Local Flags

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

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

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

3. Local Flag on Parent Commands

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

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

4. Bind Flags with Config

可以通过 viper来绑定flags。

1
2
3
4
5
6
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的可选参数,如果需要在二进制运行时添加必要参数,即当该参数没指定时会报错。可使用以下设置。

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

参考:



支付宝打赏 微信打赏

赞赏一下