命令行应用之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                       
)
————————

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                       
)