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
}