命令行应用之flag包
1、 flag 基本使用和长短选项
package main import ( "flag" "fmt" ) func main() { var name string flag.StringVar(&name, "name", "Go 语言编程之旅", "帮助信息") flag.StringVar(&name, "n", "Go 语言编程之旅", "帮助信息") flag.Parse() fmt.Printf("name: %s", name) }
2、子命令
package main import ( "flag" "fmt" ) var name string func main() { flag.Parse() args := flag.Args() if len(args) <= 0 { return } switch args[0] { case "go": goCmd := flag.NewFlagSet("go", flag.ExitOnError) goCmd.StringVar(&name, "name", "Go 语言", "帮助信息") _ = goCmd.Parse(args[1:]) case "php": phpCmd := flag.NewFlagSet("php", flag.ExitOnError) phpCmd.StringVar(&name, "n", "PHP 语言", "帮助信息") _ = phpCmd.Parse(args[1:]) } fmt.Printf("name: %s", name) }
注意:这里需要特别注意的是 flag.NewFlagSet 方法的第二个参数是 ErrorHandling,用于指定处理异常错误的情况处理,其内置提供以下三种模式:
const ( // 返回错误描述 ContinueOnError ErrorHandling = iota // 调用 os.Exit(2) 退出程序 ExitOnError // 调用 panic 语句抛出错误异常 PanicOnError )