08.2 flag包
import (
"flag"
"fmt"
)func main() {
minusK := flag.Bool("k", true, "k")
minusO := flag.Int("O", 1, "O")
flag.Parse() valueK := *minusK
valueO := *minusO
valueO++
Last updated
import (
"flag"
"fmt"
)func main() {
minusK := flag.Bool("k", true, "k")
minusO := flag.Int("O", 1, "O")
flag.Parse() valueK := *minusK
valueO := *minusO
valueO++
Last updated
fmt.Println("-k:", valueK)
fmt.Println("-O:", valueO)
}$ go run simpleFlag.go -O 100
-k: true
-O: 101
$ go run simpleFlag.go -O=100
-k: true
-O: 101
$ go run simpleFlag.go -O=100 -k
-k: true
-O: 101
$ go run simpleFlag.go -O=100 -k false
-k: true
-O: 101
$ go run simpleFlag.go -O=100 -k=false
-k: false
-O: 101$ go run simpleFlag.go -O=notAnInteger
invalid value "notAnInteger" for flag -O: strconv.ParseInt: parsing "notAnInteger": invalid syntax
Usage of /var/folders/sk/ltk8cnw501zdtr2hxcj5sv2m0000gn/T/go-build020625525/command-line arguments/_obj/exe/simpleFlag:
-O int
O (default 1)
-k k (default true)
exit status 2type Value interface {
String() string
Set(string) error
}package main
import(
"flag"
"fmt"
"strings"
)
type NamesFlag struct {
Names []string
}func (s *NamesFlag) GetNames() []string{
return s.Names
}
func (s *NamesFlag) String() string {
return fmt.Sprint(s.Names)
}func (s *NamesFlag) Set(v string) error {
if len(s.Names) > 0 {
return fmt.Errorf("Cannot use names flag more than once!")
}
names := strings.Split(v, ",")
for _, item := range names {
s.Names = append(s.Names, item)
}
return nil
}func main() {
var manyNames NamesFlag
minusK := flag.Int("k:", 0, "An int")
minusO := flag.String("o", "Mihalis", "The name")
flag.Var(&manyNames, "names", "Comma-separated list")
flag.Parse()
fmt.Println("-k:", *minusK)
fmt.Println("-o:", *minusO) for i, item := range manyNames.GetNames() {
fmt.Println(i, item)
}
fmt.Println("Remaing command-line arugments:")
for index, val := range flag.Args() {
fmt.Println(index, ":", val)
}
}