我可以添加带有Go标志的命令吗?
我知道我可以这样定义标志:我可以添加带有Go标志的命令吗?,go,config,Go,Config,我知道我可以这样定义标志: initPtr := flag.String("init", "config.json", "Initialize with config filename") myapp --init=myconfig.json 我会这样称呼它: initPtr := flag.String("init", "config.json", "Initialize with config filename") myapp --init=myconfig.json 我想知道我是否
initPtr := flag.String("init", "config.json", "Initialize with config filename")
myapp --init=myconfig.json
我会这样称呼它:
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
是的,你可以
请查看标记集文档
例如:
还有一个miltonb要求的例子:
% go run flagset.go init --filename=foo.json foo bar
init foo.json [foo bar]
% go run flagset.go check --filename=bar.json 1 2 3
check bar.json [1 2 3]
% go run flagset.go run
run
% cat flagset.go
package main
import (
"flag"
"fmt"
"os"
)
func main() {
init := flag.NewFlagSet("init", flag.ExitOnError)
initFile := init.String("filename", "myconfig.json", "configuration file")
check := flag.NewFlagSet("check", flag.ExitOnError)
checkFile := check.String("filename", "myconfig.json", "configuration file")
if len(os.Args) <= 1 {
flag.Usage()
os.Exit(1)
}
switch os.Args[1] {
case "init":
if err := init.Parse(os.Args[2:]); err == nil {
fmt.Println("init", *initFile, init.Args())
}
case "check":
if err := check.Parse(os.Args[2:]); err == nil {
fmt.Println("check", *checkFile, check.Args())
}
case "run":
fmt.Println("run")
}
}
%go run flagset.go init--filename=foo.json foo bar
init foo.json[foo-bar]
%go run flagset.go check--filename=bar.json 1 2 3
check bar.json[1 2 3]
%快跑旗手,快跑
跑
%猫旗手,开始
包干管
进口(
“旗帜”
“fmt”
“操作系统”
)
func main(){
init:=flag.NewFlagSet(“init”,flag.ExitOnError)
initFile:=init.String(“文件名”、“myconfig.json”、“配置文件”)
检查:=flag.NewFlagSet(“检查”,flag.ExitOnError)
checkFile:=check.String(“文件名”、“myconfig.json”、“配置文件”)
如果len(os.Args)您可以使用和的组合来实现
例如
另一种选择是使用类似的方法
更新:
如果您需要根据命令使用不同的标志,您可以使用Kare Nuorteva的回答中提到的
例如
如果您添加一个关于实现工作原理的小示例,那将非常酷。请注意,有些保留标志您无法覆盖。如果我记得的话,“build”和“help”是两个这样的标志。“Run”可能是另一个。