go语言 flag用法
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) }