golang里,可使用flag包实现命令参数的解析
如果带子命令,则需要如何做?比如: fs fastput -h - v -b=20M src dest 。fs 是命令,带一个fastput子命令
本帖子是本人在实际开发中,遇到最后摸索解决的办法。记录此
不带子命令的例子:
package main
import (
"flag"
"fmt"
)
var b = flag.Bool("b", false, "bool类型参数")
var s = flag.String("s", "", "string类型参数")
func main() {
flag.Parse()
fmt.Println("-b:", *b)
fmt.Println("-s:", *s)
fmt.Println("剩余参数:", flag.Args())
}
带子命令使用 flagset
func parseParameter(args []string) []string {
flagset := flag.NewFlagSet("fs fastput", flag.ContinueOnError)
var b = flagset.String("b", "", "bandwidth limit")
var f = flagset.Bool("f", false, "overwrite")
var h = flagset.Bool("h", false, "help")
var t = flagset.Int("t", 5, "upload thread number")
var v = flagset.Bool("v", false, "verbose")
err := flagset.Parse(args)
help := *h
// other operation
}
func fastput(args []string) {
if len(args) < 2 && args[0] != "-h"{
printHelp()
}
addr := parseParameter(args)
// other operation
}
func main() {
if len(os.Args) < 2 {
printHelp()
}
command := os.Args[1]
switch command {
case "fastput":
fastput(argv[1:])
// other operation
}
// other operation
}