go语言flag用法之一
package main
import (
"flag"
"log"
)
var name string
func main() {
flag.Parse() //将命令解析为定义的标志,一遍后续的参数使用
args := flag.Args() //将传入的参数赋值给args变量
if len(args) <= 0 {
return
}
switch args[0] {
case "go":
goComd := flag.NewFlagSet("go", flag.ExitOnError) //返回再有指定名称和错误处理属性的空命令集,相当于创建一个新命令去支持子命令.
goComd.StringVar(&name, "name", "Go语言", "帮助信息")
_ = goComd.Parse(args[1:])
case "php":
phpCmd := flag.NewFlagSet("php", flag.ExitOnError)
phpCmd.StringVar(&name, "n", "php", "帮助信息")
_ = phpCmd.Parse(args[1:])
}
log.Printf("name: %s", name)
}
自定义参数类型
package main
import (
"errors"
"flag"
"fmt"
"log"
)
type Name string //指定一个Name个类型
type Value interface { //创建一个value接口
String() string //声明string方法
Set() error //声明set方法
}
func (i *Name) String() string { //Name字符串类型绑定 到方法string()上.并且将*Name取别名为 i.使用
return fmt.Sprint(*i) //返回i的指针
}
func (i *Name) Set(value string) error { //同上 *绑定set方法
if len(*i) > 0 {
return errors.New("Name flag already set") //
}
*i = Name("eddycjy:" + value)
return nil
}
func main() {
var name Name
flag.Var(&name, "name", "帮助信息")
flag.Parse()
log.Printf("name: %s", name)
}