命令行参数
argsWithProg := os.Args
argsWithoutProg := os.Args[1:]
fmt.Println(argsWithProg)
fmt.Println(argsWithoutProg)
命令行中运行程序并输入:
./command-line-arguments a b c d
命令行输出:
[./command-line-arguments a b c d]
[a b c d]
命令行标志
wordPtr := flag.String("word", "foo", "a string")
numbPtr := flag.Int("numb", 42, "an int")
forkPtr := flag.Bool("fork", false, "a bool")
var svar string
flag.StringVar(&svar, "svar", "bar", "a string var")
flag.Parse()
fmt.Println("word:", *wordPtr)
fmt.Println("numb:", *numbPtr)
fmt.Println("fork:", *forkPtr)
fmt.Println("svar:", svar)
fmt.Println("tail:", flag.Args())
% ./command-line-flags -word=opt -numb=7 -fork -svar=flag
word: opt
numb: 7
fork: true
svar: flag
tail: []
% ./command-line-flags -word=opt
word: opt
numb: 42
fork: false
svar: bar
tail: []
% ./command-line-flags -word=opt a1 a2 a3
word: opt
numb: 42
fork: false
svar: bar
tail: [a1 a2 a3]
% ./command-line-flags -word=opt a1 a2 a3 -numb=7
word: opt
numb: 42
fork: false
svar: bar
tail: [a1 a2 a3 -numb=7]
% ./command-line-flags -h
Usage of ./command-line-flags:
-fork
a bool
-numb int
an int (default 42)
-svar string
a string var (default “bar”)
-word string
a string (default “foo”)
% ./command-line-flags -wat
flag provided but not defined: -wat
Usage of ./command-line-flags:
-fork
a bool
-numb int
an int (default 42)
-svar string
a string var (default “bar”)
-word string
a string (default “foo”)
命令行子参数
fooCmd := flag.NewFlagSet("foo", flag.ExitOnError)
fooEnable := fooCmd.Bool("enable", false, "enable")
fooName := fooCmd.String("name", "", "name")
barCmd := flag.NewFlagSet("bar", flag.ExitOnError)
barLevel := barCmd.Int("level", 0, "level")
if len(os.Args) < 2 {
fmt.Println("expected 'foo' or 'bar' subcommands")
os.Exit(1)
}
switch os.Args[1] {
case "foo":
fooCmd.Parse(os.Args[2:])
fmt.Println("subcommand 'foo'")
fmt.Println(" enable:", *fooEnable)
fmt.Println(" name:", *fooName)
fmt.Println(" tail:", fooCmd.Args())
case "bar":
barCmd.Parse(os.Args[2:])
fmt.Println("subcommand 'bar'")
fmt.Println(" level:", *barLevel)
fmt.Println(" tail:", barCmd.Args())
default:
fmt.Println("expected 'foo' or 'bar' subcommands")
os.Exit(1)
}
% ./command-line-subcommands foo -enable -name=joe a1 a2
subcommand ‘foo’
enable: true
name: joe
tail: [a1 a2]
% ./command-line-subcommands bar -level 8 a1
subcommand ‘bar’
level: 8
tail: [a1]
% ./command-line-subcommands bar -enable a1
flag provided but not defined: -enable
Usage of bar:
-level int
level