我有一个cobra
命令
var mycommandCmd = &cobra.Command{
Use: "mycommand",
PersistentPreRunE: func(cmd *cobra.Command, args []string) error {
viper.BindPFlags(cmd.Flags())
和一个子命令
var mysubcommandCmd = &cobra.Command{
Use: "mysubcommand",
Args: cobra.ExactArgs(1),
PreRun: func(cmd *cobra.Command, args []string) {
fmt.Println("HELLO")
},
RunE: func(cmd *cobra.Command, args []string) error {
viper.BindPFlags(cmd.Flags())
PreRun
但是,当参数传递出现错误时,我没有看到正在执行的钩子。
在上述情况下,mysubcommand
只需要一个参数,因此在没有它的情况下调用它时:
go run main.go mycommand mysubcommand
Error: accepts 1 arg(s), received 0
Usage:
myprog mycommand mysubcommand [flags]
FWIW 我想做的是打印一个更优雅和信息丰富的消息,以防参数计数错误。
PreRunE
代替使用时的情况也是一样PreRun