gpt4 book ai didi

go - 我可以添加带有 Go 标志的命令吗?

转载 作者:IT王子 更新时间:2023-10-29 02:03:39 24 4
gpt4 key购买 nike

我知道我可以这样定义标志:

initPtr := flag.String("init", "config.json", "Initialize with config filename")

我会这样调用它:

myapp --init=myconfig.json

我想知道我是否可以定义类似命令的东西以便像这样调用应用程序?

myapp init --filename=myconfig.json
myapp check --filename=myconfig.json
myapp run

最佳答案

您可以使用 command line arguments 的组合来做到这一点和 flags .

例如。

configFilePtr := flag.String("filename", "", "Config Filename")
flag.Parse()

n := len(os.Args)
if n > 1 {
switch os.Args[1] {
case "init":
initApp(*configFilePtr)
case "check":
checkApp(*configFilePtr)
case "run":
runApp()
}
}

另一种选择是使用类似 spf13's cobra 的东西.

更新:

如果您需要根据命令使用不同的标志,您可以使用 FlagSetKare Nuorteva 的回答中所述。

例如。

f1 := flag.NewFlagSet("f1", flag.ContinueOnError)
silent := f1.Bool("silent", false, "")
f2 := flag.NewFlagSet("f2", flag.ContinueOnError)
loud := f2.Bool("loud", false, "")

switch os.Args[1] {
case "apply":
if err := f1.Parse(os.Args[2:]); err == nil {
fmt.Println("apply", *silent)
}
case "reset":
if err := f2.Parse(os.Args[2:]); err == nil {
fmt.Println("reset", *loud)
}
}

Reference

关于go - 我可以添加带有 Go 标志的命令吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41599244/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com