有没有一种方法可以用urfave/cli
定义OptionFlag?
我正在寻找看起来像这样的东西。
mycli --format json
mycli --format xml
我知道我可以使用StringFlag,但是如果我可以让
--help
显示此标志的有效选项/值,那就太好了,因此对于mycli
的最终用户来说是透明的。这样,还可以根据选项来验证Flag,以通知用户他为此标志提供了无效值。当然,使用StringFlag也可以做到这一点,但宁愿做些复杂的事情来完成所有这些工作。
我还在Github存储库中提出了一个问题。也许这是一个缺少的功能,我很乐意为您提供一些指导。
https://github.com/urfave/cli/issues/1154
最佳答案
我认为您想要StringSliceFlag
它允许您为标志定义有效/默认值。
package main
import (
"fmt"
"log"
"os"
"github.com/urfave/cli/v2"
)
func main() {
validMeetings := []string{"standup", "postmortem", "jourfix"}
meetings := cli.NewStringSlice(validMeetings...)
app := &cli.App{
Flags: []cli.Flag{
&cli.StringSliceFlag{
Value: meetings,
Name: "meeting",
Usage: "use one of the default values"},
},
Action: func(c *cli.Context) error {
m := c.StringSlice("meeting")
ok := false
for _, selected := range m {
for _, valid := range validMeetings {
if selected == valid {
ok = true
}
}
}
if !ok {
return fmt.Errorf("you must use one of %v", validMeetings)
}
fmt.Printf("%s\n", c.String("meeting"))
return nil
},
}
err := app.Run(os.Args)
if err != nil {
log.Fatal(err)
}
}
https://github.com/urfave/cli/blob/4f74020d9f07911f0fdb8facbc1f557a12cd2a93/app_test.go#L760
关于go - 如何使用urfave/cli实现OptionFlag,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62472518/