65-cmd-line-flags

// 命令行标识是制定命令行程序选项的常用方法
// 例如: wc -l 其中 -l 就是一个命令行标识

package main

import (
	"flag" // Go提供flag包支持基本的命令行标识解析
	"fmt"
)

func main() {
	// 基本的标识声明可以用字符串、整数和布尔型

	// 声明一个字符串型标识word,默认值为foo并带有一个简短的描述
	// flag.String函数返回一个字符串指针(而不是一个字符串值)
	wordPtr := flag.String("word", "foo", "a string")
	numbPtr := flag.Int("numb", 42, "an int")
	boolPtr := flag.Bool("fork", false, "a bool")

	// 也可以使用一个程序中已经存在的变量来声明一个命令行标识
	// 注意,西药传递一个指针给标识的声明函数
	var svar string
	flag.StringVar(&svar, "svar", "bar", "a string var")

	// 一旦所以的标识都声明好,就可以调用flag.Parse函数来执行命令行解析
	flag.Parse()

	// 请注意在输出时,需要取消指针引用,即获取指针的实际值
	fmt.Println("word:", *wordPtr)
	fmt.Println("numb:", *numbPtr)
	fmt.Println("fork:", *boolPtr)
	fmt.Println("svar:", svar)
	fmt.Println("tail:", flag.Args())
}

//请注意在命令行执行程序时,如果省略标识,则会自动采用其默认值

// 请注意,flag包要求所有命令行标识要在位置参数之前出现,否则标识会被解析为位置参数
// go  run  65-cmd-line-flags.go -word=opt a1 a2 a3 -numb=7
// word: opt
// numb: 42
// fork: false
// svar: bar
// tail: [a1 a2 a3 -numb=7]

// 使用-h或--help标志可以获得命令行程序的自动生成的帮助文本
// go run 65-cmd-line-flags.go -h
// Usage of /tmp/go-build690548213/b001/exe/65-cmd-line-flags:
//   -fork
//         a bool
//   -numb int
//         an int (default 42)
//   -svar string
//         a string var (default "bar")
//   -word string
//         a string (default "foo")
// exit status 2

// 如果使用未提供给flag包的标识程序将打印错误消息并再次显示帮助文本
上次修改: 10 January 2020