go flag包實現帶子命令參數解析

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
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章