Skip to content

Commit 5c26dbd

Browse files
committed
update command line flags
1 parent 7e99bda commit 5c26dbd

File tree

3 files changed

+23
-27
lines changed

3 files changed

+23
-27
lines changed

PROGRESS.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@
7373
- [x] Temporary Files and Directories->临时文件和目录
7474
- [x] Testing->单元测试
7575
- [x] Command-Line Arguments->命令行参数
76-
- [ ] Command-Line Flags->命令行标志
76+
- [x] Command-Line Flags->命令行标志
7777
- [ ] Command-Line Subcommands->命令行子命令
7878
- [ ] Environment Variables->环境变量
7979
- [ ] HTTP Clients->HTTP 客户端

examples/command-line-flags/command-line-flags.go

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,34 +6,34 @@ package main
66

77
// Go 提供了一个 `flag` 包,支持基本的命令行标志解析。
88
// 我们将用这个包来实现我们的命令行程序示例。
9-
import "flag"
10-
import "fmt"
9+
import (
10+
"flag"
11+
"fmt"
12+
)
1113

1214
func main() {
1315

1416
// 基本的标记声明仅支持字符串、整数和布尔值选项。
15-
// 这里我们声明一个默认值为 `"foo"` 的字符串标志 `word`
16-
// 并带有一个简短的描述。这里的 `flag.String` 函数返回一个字
17-
// 符串指针(不是一个字符串值),在下面我们会看到是如何
18-
// 使用这个指针的。
17+
// 这里我们声明一个默认值为 `"foo"` 的字符串标志 `word` 并带有一个简短的描述。
18+
// 这里的 `flag.String` 函数返回一个字符串指针(不是一个字符串值),
19+
// 在下面我们会看到是如何使用这个指针的。
1920
wordPtr := flag.String("word", "foo", "a string")
2021

2122
// 使用和声明 `word` 标志相同的方法来声明 `numb` 和 `fork` 标志。
2223
numbPtr := flag.Int("numb", 42, "an int")
2324
boolPtr := flag.Bool("fork", false, "a bool")
2425

25-
// 用程序中已有的参数来声明一个标志也是可以的。
26-
// 意在标志声明函数中需要使用该参数的指针
26+
// 用程序中已有的参数来声明一个标志也是可以的。
27+
// 注意在标志声明函数中需要使用该参数的指针
2728
var svar string
2829
flag.StringVar(&svar, "svar", "bar", "a string var")
2930

30-
// 所有标志都声明完成以后,调用 `flag.Parse()` 来执行
31-
// 命令行解析。
31+
// 所有标志都声明完成以后,调用 `flag.Parse()` 来执行命令行解析。
3232
flag.Parse()
3333

34-
// 这里我们将仅输出解析的选项以及后面的位置参数。注意,
35-
// 我们需要使用类似 `*wordPtr` 这样的语法来对指针解引用,从而
36-
// 得到选项的实际值
34+
// 这里我们将仅输出解析的选项以及后面的位置参数。
35+
// 注意,我们需要使用类似 `*wordPtr` 这样的语法来对指针解引用,
36+
// 从而得到选项真正的值
3737
fmt.Println("word:", *wordPtr)
3838
fmt.Println("numb:", *numbPtr)
3939
fmt.Println("fork:", *boolPtr)
Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
1-
# 测试这个程序前,最好将这个程序编译成二进制文件,然后再运
2-
# 行这个程序。
1+
# 测试这个程序前,最好将这个程序编译成二进制文件,然后再运行这个程序。
32
$ go build command-line-flags.go
43

4+
# 首先以给所有标志赋值的方式,尝试运行构建的程序。
5+
$ ./command-line-flags -word=opt -numb=7 -fork -svar=flag
56
word: opt
67
numb: 7
78
fork: true
89
svar: flag
910
tail: []
1011

11-
# 注意到,如果你省略一个标志,那么这个标志的值自动的设
12-
# 定为他的默认值。
12+
# 注意,如果你省略一个标志,那么这个标志的值自动的设定为他的默认值。
1313
$ ./command-line-flags -word=opt
1414
word: opt
1515
numb: 42
@@ -23,29 +23,25 @@ word: opt
2323
...
2424
tail: [a1 a2 a3]
2525

26-
# 注意,`flag` 包需要所有的标志出现位置参数之前(
27-
# 否则,这个标志将会被解析为位置参数)。
26+
# 注意,`flag` 包需要所有的标志出现位置参数之前(否则,这个标志将会被解析为位置参数)。
2827
$ ./command-line-flags -word=opt a1 a2 a3 -numb=7
2928
word: opt
3029
numb: 42
3130
fork: false
3231
svar: bar
33-
trailing: [a1 a2 a3 -numb=7]
32+
tail: [a1 a2 a3 -numb=7]
3433

35-
# 使用 `-h` 或者 `--help` 标志来得到自动生成的这个命
36-
# 令行程序的帮助文本。
34+
# 使用 `-h` 或者 `--help` 标志来得到自动生成的这个命令行程序的帮助文本。
3735
$ ./command-line-flags -h
3836
Usage of ./command-line-flags:
3937
-fork=false: a bool
4038
-numb=42: an int
4139
-svar="bar": a string var
4240
-word="foo": a string
4341

44-
# 如果你提供一个没有使用 `flag` 包指定的标志,程序会输出一
45-
# 个错误信息,并再次显示帮助文本。
42+
# 如果你提供了一个没有使用 `flag` 包声明的标志,
43+
# 程序会输出一个错误信息,并再次显示帮助文本。
4644
$ ./command-line-flags -wat
4745
flag provided but not defined: -wat
4846
Usage of ./command-line-flags:
4947
...
50-
51-
# 后面,我们将会看一下环境变量,另一个用于参数化程序的基本方式。

0 commit comments

Comments
 (0)