1

使用 spf13/Cobra 进行 cli 标志解析。

root 命令有一个标记为必需的字段:

rootCmd.PersistentFlags().StringVarP(&configFilePath, "config", "c","", "REQUIRED: config file")
    rootCmd.MarkPersistentFlagRequired("config")    
    rootCmd.MarkFlagRequired("config")

但是,如果它是 root 命令,cobra 不会引发错误。

如果我添加子命令并添加必填字段,如果命令行上未提供参数,.MarkFlagRequired 会按预期引发错误。

4

1 回答 1

1

这对我有用。

package main

import (
    "fmt"

    "github.com/spf13/cobra"
)

func main() {
    var strTmp string
    rootCmd := &cobra.Command{
        Use: "root",
        Run: func(cmd *cobra.Command, args []string) {
            fmt.Println(strTmp)
        },
    }
    subCmd := &cobra.Command{
        Use: "sub",
        Run: func(cmd *cobra.Command, args []string) {
            fmt.Println(strTmp)
        },
    }
    rootCmd.PersistentFlags().StringVarP((&strTmp), "test", "t", "", "test required")
    rootCmd.MarkPersistentFlagRequired("test")
    rootCmd.AddCommand(subCmd)
    rootCmd.Execute()
}

输出

子命令

 ⇒  go run test.go sub     
Error: required flag(s) "test" not set
Usage:
  root sub [flags]

Flags:
  -h, --help   help for sub

Global Flags:
  -t, --test string   test required

根命令

⇒  go run test.go     
Error: required flag(s) "test" not set
Usage:
  root [flags]
  root [command]

Available Commands:
  completion  generate the autocompletion script for the specified shell
  help        Help about any command
  sub         

Flags:
  -h, --help          help for root
  -t, --test string   test required

Use "root [command] --help" for more information about a command.
于 2022-01-19T16:13:07.113 回答