0

私は次のフラグを追加していますcobra.Cmd

    myCmd.PersistentFlags().StringP(applicationLongFlag, applicationShortFlag, applicationDefaultValue, applicationFlagHelpMsg)

どこ

    applicationLongFlag     = "application"
    applicationShortFlag    = "a"
    applicationDefaultValue = ""
    applicationFlagHelpMsg  = "The application name"

これは期待どおりに機能しますが、必要に応じて上記のフラグを作成しようとすると、プロセスが失敗します


    if err := myCmd.MarkFlagRequired(applicationShortFlag); err != nil {
        return errors.Wrapf(err, "error marking %s as required flag", applicationShortFlag)
    }
error marking a as required flag: no such flag -a

-a/--application期待どおりに動作し、私のヘルプにも印刷されています

▶ go run myprog.go mycommand --help

Usage:
  myprog.go mycommand [flags]

Flags:
  -a, --application string   The application name

必要に応じて設定できないのはなぜですか?

4

1 に答える 1

0

永続的なフラグをマークしようとしているので、MarkPersistentFlagRequired代わりに使用する必要があると思います。フラグMarkFlagRequiredのみを使用でき、 .nameshorthand

コード

package main

import (
    "fmt"

    "github.com/spf13/cobra"
)

func main() {
    rootCmd := &cobra.Command{
        Use: "root",
        Run: func(cmd *cobra.Command, args []string) {
            fmt.Println("Mark using `MarkPersistentFlagRequired` ")
        },
    }

    rootCmd.PersistentFlags().StringP("test", "t", "", "test required")
    // Change this
    if err := rootCmd.MarkPersistentFlagRequired("test"); err != nil {
        fmt.Println(err.Error())
        return
    }
    rootCmd.Execute()
}

出力

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

Flags:
  -h, --help          help for root
  -t, --test string   test required
于 2022-01-19T16:19:58.903 に答える