Can you specify optional parameters for flags in Cobra?

王林
Release: 2024-02-13 08:40:08
forward
819 people have browsed it

您可以为 Cobra 中的标志指定可选参数吗?

php editor Zimo answered: Yes, you can specify optional parameters for flags in Cobra. Cobra is a powerful command line tool for creating elegant PHP applications. You can specify optional parameters for a Cobra command by adding square brackets ([]) after the flag. This allows the user to optionally provide additional information or configuration options as needed. Using optional parameters can increase the flexibility and adaptability of the program and provide users with a better experience.

Question content

Suppose I have this flag in my program and it only prints positive numbers:

c.PersistentFlags().IntVar(&SomeFlag, optionSomeFlag, 0, "Do something (range: x-y)")

The default value is 0, so if the user does not toggle the flag, nothing will be printed. How to make a flag accept parameters but have a default value itself? i.e. if the default value is 5

./program --someflag The output will be 5

But if I do this

./program --someflag=1 The output will be 1

I'm trying to follow Cobra's user guide and was expecting to have a command type that would allow me to specify a default value only when the user triggers the flag, rather than just specifying a default value entirely. I may have misunderstood this or missed something.

Solution

Can be done using nooptdefval

rootcmd.persistentflags().lookup("someflag").nooptdefval = "5"
Copy after login

In the code below you can find a complete example of a command line application with cobra that has the behavior you describe

package main

import (
    "fmt"
    "github.com/spf13/cobra"
)

func main() {
    var someflag int
    var defaultsomeflag = "5"

    // create the root command.
    rootcmd := &cobra.command{
        use:   "program",
        short: "a brief description of your application",
        long:  "a longer description of your application",
        run: func(cmd *cobra.command, args []string) {
            // check whether the flag was explicitly set.
            if cmd.flags().lookup("someflag").changed {
                fmt.printf("someflag: %d\n", someflag)
            } else {
                // if the flag was not explicitly set don't print a value.
                fmt.printf("someflag is not set\n")
            }
        },
    }

    // define the flag and set its default value.
    rootcmd.persistentflags().intvar(&someflag, "someflag", 0, "do something (range: x-y)")
    rootcmd.persistentflags().lookup("someflag").nooptdefval = defaultsomeflag

    // execute the root command.
    if err := rootcmd.execute(); err != nil {
        fmt.println(err)
    }
}
Copy after login

The following are the execution results of different flag values.

$ ./test
someflag is not set
$ ./test --someflag
someflag: 5
$ ./test --someflag=3
someflag: 3
Copy after login

The above is the detailed content of Can you specify optional parameters for flags in Cobra?. For more information, please follow other related articles on the PHP Chinese website!

source:stackoverflow.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!