
os.Args
可以接受终端参数数组
1 2 3 4 5 6 7 8 9 10 11 12
|
func () { argsWithProg := os.Args fmt.Println(argsWithProg)
argsWithoutProg := os.Args[1:] fmt.Println(argsWithoutProg)
arg := os.Args[3] fmt.Println(arg) }
|
flag.String, flag.Int, flag.Bool
Go提供了flag包,可以接收终端输入的参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
func () { wordPtr := flag.String("word", "foo", "a string") numbPtr := flag.Int("numb", 42, "an int") boolPtr := flag.Bool("fork", false, "a bool")
flag.Parse()
fmt.Println("word:", *wordPtr) fmt.Println("numb:", *numbPtr) fmt.Println("fork:", *boolPtr) fmt.Println("tail:", flag.Args())
flag.Usage() }
|
所有标志声明完成,需要flag.Parse()执行命令解释,flag.Usage()可以提示帮助信息到终端
NewFlagSet
使用NewFlagSet可以实现用户自定义flag
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
func main() {
addBlockCmd := flag.NewFlagSet("addblock", flag.ExitOnError) printChainCmd := flag.NewFlagSet("printchain", flag.ExitOnError)
addBlockData := addBlockCmd.String("data", "", "Block data")
switch os.Args[1] { case "addblock": err := addBlockCmd.Parse(os.Args[2:]) if err != nil { log.Panic(err) } case "printchain": err := printChainCmd.Parse(os.Args[2:]) if err != nil { log.Panic(err) } default: fmt.Println("No addblock and printchain!") os.Exit(1) }
if addBlockCmd.Parsed() { if *addBlockData == "" { addBlockCmd.Usage() os.Exit(1) } fmt.Println("Data:" + *addBlockData) }
if printChainCmd.Parsed() { fmt.Println("printchain,printchain,printchain!") } }
|
使用:
./main.go addblock -data "send 2 btc to hackboy"
近期评论