| 12 | ) |
| 13 | |
| 14 | func main() { |
| 15 | |
| 16 | // 基本的标记声明仅支持字符串、整数和布尔值选项。 |
| 17 | // 这里我们声明一个默认值为 `"foo"` 的字符串标志 `word` 并带有一个简短的描述。 |
| 18 | // 这里的 `flag.String` 函数返回一个字符串指针(不是一个字符串值), |
| 19 | // 在下面我们会看到是如何使用这个指针的。 |
| 20 | wordPtr := flag.String("word", "foo", "a string") |
| 21 | |
| 22 | // 使用和声明 `word` 标志相同的方法来声明 `numb` 和 `fork` 标志。 |
| 23 | numbPtr := flag.Int("numb", 42, "an int") |
| 24 | forkPtr := flag.Bool("fork", false, "a bool") |
| 25 | |
| 26 | // 用程序中已有的参数来声明一个标志也是可以的。 |
| 27 | // 注意在标志声明函数中需要使用该参数的指针。 |
| 28 | var svar string |
| 29 | flag.StringVar(&svar, "svar", "bar", "a string var") |
| 30 | |
| 31 | // 所有标志都声明完成以后,调用 `flag.Parse()` 来执行命令行解析。 |
| 32 | flag.Parse() |
| 33 | |
| 34 | // 这里我们将仅输出解析的选项以及后面的位置参数。 |
| 35 | // 注意,我们需要使用类似 `*wordPtr` 这样的语法来对指针解引用, |
| 36 | // 从而得到选项真正的值。 |
| 37 | fmt.Println("word:", *wordPtr) |
| 38 | fmt.Println("numb:", *numbPtr) |
| 39 | fmt.Println("fork:", *forkPtr) |
| 40 | fmt.Println("svar:", svar) |
| 41 | fmt.Println("tail:", flag.Args()) |
| 42 | } |