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
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值