Skip to content

Commit 19c445c

Browse files
committed
sync 1-10
1 parent 183e7cf commit 19c445c

File tree

17 files changed

+86
-109
lines changed

17 files changed

+86
-109
lines changed

PROGRESS.md

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,16 @@
88

99
# 同步进度
1010

11-
- [ ] Hello World
12-
- [ ] Values->值
13-
- [ ] Variables->变量
14-
- [ ] Constants->常量
15-
- [ ] For->For 循环
16-
- [ ] If/Else->If/Else 分支
17-
- [ ] Switch->Switch 分支结构
18-
- [ ] Arrays->数组
19-
- [ ] Slices->切片
20-
- [ ] Maps->Map
11+
- [x] Hello World
12+
- [x] Values->值
13+
- [x] Variables->变量
14+
- [x] Constants->常量
15+
- [x] For->For 循环
16+
- [x] If/Else->If/Else 分支
17+
- [x] Switch->Switch 分支结构
18+
- [x] Arrays->数组
19+
- [x] Slices->切片
20+
- [x] Maps->Map
2121
- [ ] Range->Range 遍历
2222
- [ ] Functions->函数
2323
- [ ] Multiple Return Values->多返回值

examples/arrays/arrays.go

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,31 @@
1-
// 在 Go 中,_数组_ 是一个具有固定长度且编号的元素序列
1+
// 在 Go 中,_数组_ 是一个具有编号且长度固定的元素序列
22

33
package main
44

55
import "fmt"
66

77
func main() {
88

9-
// 这里我们创建了一个数组 `a` 来存放刚好 5 个 `int`。
10-
// 元素的类型和长度都是数组类型的一部分。数组默认是
11-
// 零值的,对于 `int` 数组来说也就是 `0`。
9+
// 这里我们创建了一个刚好可以存放 5 个 `int` 元素的数组 `a`。
10+
// 元素的类型和长度都是数组类型的一部分。
11+
// 数组默认值是零值,对于 `int` 数组来说,元素的零值是 `0`。
1212
var a [5]int
1313
fmt.Println("emp:", a)
1414

15-
// 我们可以使用 `array[index] = value` 语法来设置数组
16-
// 指定位置的值,或者用 `array[index]` 得到值。
15+
// 我们可以使用 `array[index] = value` 语法来设置数组指定位置的值,
16+
// 或者用 `array[index]` 得到值。
1717
a[4] = 100
1818
fmt.Println("set:", a)
1919
fmt.Println("get:", a[4])
2020

21-
// 使用内置函数 `len` 返回数组的长度
21+
// 内置函数 `len` 可以返回数组的长度
2222
fmt.Println("len:", len(a))
2323

2424
// 使用这个语法在一行内声明并初始化一个数组。
2525
b := [5]int{1, 2, 3, 4, 5}
2626
fmt.Println("dcl:", b)
2727

28-
// 数组类型是一维的,但是你可以组合
29-
// 构造多维的数据结构。
28+
// 数组类型是一维的,但是你可以组合构造多维的数据结构。
3029
var twoD [2][3]int
3130
for i := 0; i < 2; i++ {
3231
for j := 0; j < 3; j++ {

examples/arrays/arrays.sh

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
# 注意,在使用 `fmt.Println` 来打印数组的时候,会使用
2-
# `[v1 v2 v3 ...]` 的格式显示。
1+
# 注意,使用 `fmt.Println` 打印数组时,会按照 `[v1 v2 v3 ...]` 的格式打印。
32
$ go run arrays.go
43
emp: [0 0 0 0 0]
54
set: [0 0 0 0 100]
@@ -8,5 +7,4 @@ len: 5
87
dcl: [1 2 3 4 5]
98
2d: [[0 1 2] [1 2 3]]
109

11-
# 在 Go 程序中,相对于数组而言,_切片(slice)_ 使用
12-
# 的更多。下面我们讨论切片。
10+
# 在 Go 程序中,相较于数组,用得更多的是 _切片(slice)_。我们接着来看切片。

examples/constants/constants.go

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,17 @@ const s string = "constant"
1010
func main() {
1111
fmt.Println(s)
1212

13-
// `const` 语句可以出现在任何 `var` 语句可以出现
14-
// 的地方
13+
// `const` 语句可以出现在任何 `var` 语句可以出现的地方
1514
const n = 500000000
1615

1716
// 常数表达式可以执行任意精度的运算
1817
const d = 3e20 / n
1918
fmt.Println(d)
2019

21-
// 数值型常量没有确定的类型,直到被给定
22-
// ,比如一次显示的类型转化。
20+
// 数值型常量没有确定的类型,直到被给定某个类型,比如显示类型转化。
2321
fmt.Println(int64(d))
2422

25-
// 当上下文需要时,比如变量赋值或者函数调用,
26-
// 一个数可以被给定一个类型。举个例子,这里的 `math.Sin`
27-
// 函数需要一个 `float64` 的参数。
23+
// 一个数字可以根据上下文的需要(比如变量赋值、函数调用)自动确定类型。
24+
// 举个例子,这里的 `math.Sin` 函数需要一个 `float64` 的参数,`n` 会自动确定类型。
2825
fmt.Println(math.Sin(n))
2926
}

examples/for/for.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
// `for` 是 Go 中唯一的循环结构。这里有 `for` 循环
2-
// 的三个基本使用方式。
1+
// `for` 是 Go 中唯一的循环结构。这里会展示 `for` 循环的三种基本使用方式。
32

43
package main
54

@@ -19,14 +18,14 @@ func main() {
1918
fmt.Println(j)
2019
}
2120

22-
// 不带条件的 `for` 循环将一直重复执行,直到在循环体内使用
23-
// `break` 或者 `return` 来跳出循环
21+
// 不带条件的 `for` 循环将一直重复执行,
22+
// 直到在循环体内使用了 `break` 或者 `return` 跳出循环
2423
for {
2524
fmt.Println("loop")
2625
break
2726
}
2827

29-
// 你也可以使用 `continue` 来跳到下一个循环迭代
28+
// 你也可以使用 `continue` 直接进入下一次循环。
3029
for n := 0; n <= 5; n++ {
3130
if n%2 == 0 {
3231
continue

examples/for/for.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,5 @@ loop
1010
3
1111
5
1212

13-
# 后续教程中当我们学习 `range` 语句,channels,以及其他
14-
# 数据结构时,将会看到一些 `for` 的其它形式
13+
# 我们在后续教程中学习 `range` 语句,channels 以及其他数据结构时,
14+
# 还会看到一些 `for` 的其它用法

examples/hello-world/hello-world.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
// 我们的第一个程序将打印传说中的 "`hello world`"
2-
// 消息,右边是完整的程序代码。
1+
// 我们的第一个程序将打印传说中的hello world”,
2+
// 右边是完整的程序代码。
33
package main
44

55
import "fmt"

examples/hello-world/hello-world.sh

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
# 要运行这个程序,将代码放到 `hello-world.go`
2-
# 然后执行 `go run`
1+
# 要运行这个程序,先将将代码放到名为 `hello-world.go`
2+
# 的文件中,然后执行 `go run`。
33
$ go run hello-world.go
44
hello world
55

6-
# 有时候我们想将程序编译成二进制文件
6+
# 如果我们想将程序编译成二进制文件(Windows 平台是 .exe 可执行文件)
77
# 可以通过 `go build` 来达到目的。
88
$ go build hello-world.go
99
$ ls
@@ -13,5 +13,5 @@ hello-world hello-world.go
1313
$ ./hello-world
1414
hello world
1515

16-
# 现在我们可以运行并编译基本的 Go 程序,让我们开始学习更多
17-
# 关于这门语言的知识吧
16+
# 现在我们可以运行和编译基础的 Go 程序了,
17+
# 让我们开始学习更多关于这门语言的知识吧

examples/if-else/if-else.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,7 @@ func main() {
1818
fmt.Println("8 is divisible by 4")
1919
}
2020

21-
// 在条件语句之前可以有一个声明语句;在这里声明的变量
22-
// 可以在所有的条件分支中使用。
21+
// 在条件语句之前可以有一个声明语句;在这里声明的变量可以在这个语句所有的条件分支中使用。
2322
if num := 9; num < 0 {
2423
fmt.Println(num, "is negative")
2524
} else if num < 10 {
@@ -29,4 +28,4 @@ func main() {
2928
}
3029
}
3130

32-
// 注意,在 Go 中条件语句不需要圆括号,但是需要加上花括号
31+
// 注意,在 Go 中,条件语句的圆括号不是必需的,但是花括号是必需的

examples/if-else/if-else.sh

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,5 @@ $ go run if-else.go
33
8 is divisible by 4
44
9 has 1 digit
55

6-
# Go 里没有[三目运算符](http://en.wikipedia.org/wiki/%3F:),
7-
# 所以即使你只需要基本的条件判断,你仍需要使用完整的 `if`
8-
# 语句。
6+
# Go 没有[三目运算符](http://en.wikipedia.org/wiki/%3F:),
7+
# 即使是基本的条件判断,依然需要使用完整的 `if` 语句。

examples/maps/maps.go

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,40 @@
1-
// _map_ 是 Go 内置[关联数据类型](http://zh.wikipedia.org/wiki/关联数组)
2-
// 在一些其他的语言中称为_哈希(hash)_ 或者_字典(dict)_ )。
1+
// _map_ 是 Go 内建的[关联数据类型](http://zh.wikipedia.org/wiki/关联数组)
2+
// (在一些其他的语言中也被称为 _哈希(hash)_ 或者 _字典(dict)_ )。
33

44
package main
55

66
import "fmt"
77

88
func main() {
99

10-
// 要创建一个空 map,需要使用内建的 `make`:
11-
// `make(map[key-type]val-type)`.
10+
// 要创建一个空 map,需要使用内建函数 `make`:`make(map[key-type]val-type)`。
1211
m := make(map[string]int)
1312

1413
// 使用典型的 `make[key] = val` 语法来设置键值对。
1514
m["k1"] = 7
1615
m["k2"] = 13
1716

18-
// 使用例如 `fmt.Println` 来打印一个 map 将会输出所有的
19-
// 键值对。
17+
// 打印 map。例如,使用 `fmt.Println` 打印一个 map,会输出它所有的键值对。
2018
fmt.Println("map:", m)
2119

22-
// 使用 `name[key]` 来获取一个键的值
20+
// 使用 `name[key]` 来获取一个键的值
2321
v1 := m["k1"]
2422
fmt.Println("v1: ", v1)
2523

26-
// 当对一个 map 调用内建的 `len` 时,返回的是键值对
27-
// 数目
24+
// 内建函数 `len` 可以返回一个 map 的键值对数量。
2825
fmt.Println("len:", len(m))
2926

30-
// 内建的 `delete` 可以从一个 map 中移除键值对
27+
// 内建函数 `delete` 可以从一个 map 中移除键值对
3128
delete(m, "k2")
3229
fmt.Println("map:", m)
3330

34-
// 当从一个 map 中取值时,可选的第二返回值指示这个键
35-
// 是否在这个 map 中。这可以用来消除键不存在和键有零值,
36-
// 像 `0` 或者 `""` 而产生的歧义。这里我们不需要值,所以
37-
// 用_空白标识符(blank identifier)_忽略。
31+
// 当从一个 map 中取值时,还有可以选择是否接收的第二个返回值,该值表明了 map 中是否存在这个键。
32+
// 这可以用来消除 `键不存在` 和 `键的值为零值` 产生的歧义,
33+
// 例如 `0` 和 `""`。这里我们不需要值,所以用 _空白标识符(blank identifier)_ _ 将其忽略。
3834
_, prs := m["k2"]
3935
fmt.Println("prs:", prs)
4036

41-
// 你也可以通过这个语法在同一行声明和初始化一个新的
42-
// map。
37+
// 你也可以通过右边的语法在一行代码中声明并初始化一个新的 map。
4338
n := map[string]int{"foo": 1, "bar": 2}
4439
fmt.Println("map:", n)
4540
}

examples/maps/maps.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
# 注意一个 map 在使用 `fmt.Println` 打印的时候,是以 `map[k:v k:v]`
2-
# 的格式输出的。
1+
# 注意,使用 `fmt.Println` 打印一个 map 的时候,
2+
# 是以 `map[k:v k:v]` 的格式输出的。
33
$ go run maps.go
44
map: map[k1:7 k2:13]
55
v1: 7

examples/slices/slices.go

Lines changed: 14 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,14 @@
1-
// _Slice_ 是 Go 中一个关键的数据类型,是一个比数组更
2-
// 加强大的序列接口
1+
// _Slice_ 是 Go 中一个重要的数据类型,它提供了比数组更强大的序列交互方式。
32

43
package main
54

65
import "fmt"
76

87
func main() {
98

10-
// 与数组不同,slice 的类型仅由它所包含的元素决定(不需要
11-
// 元素的个数)。要创建一个长度非零的空
12-
// slice,需要使用内建的方法 `make`。这里我们创建了一
13-
// 个长度为3的 `string` 类型 slice(初始化为零值)。
9+
// 与数组不同,slice 的类型仅由它所包含的元素的类型决定(与元素个数无关)。
10+
// 要创建一个长度不为 0 的空 slice,需要使用内建函数 `make`。
11+
// 这里我们创建了一个长度为 3 的 `string` 类型的 slice(初始值为零值)。
1412
s := make([]string, 3)
1513
fmt.Println("emp:", s)
1614

@@ -24,40 +22,37 @@ func main() {
2422
// `len` 返回 slice 的长度
2523
fmt.Println("len:", len(s))
2624

27-
// 除了基本操作外,slice 支持比数组更丰富的操作。
28-
// 其中一个是内建的 `append`,它返回一个包含了一个
29-
// 或者多个新值的 slice。注意由于 `append` 可能返回
30-
// 新的 slice,我们需要接受其返回值。
25+
// 除了基本操作外,slice 支持比数组更丰富的操作。比如 slice 支持内建函数 `append`,
26+
// 该函数会返回一个包含了一个或者多个新值的 slice。
27+
// 注意由于 `append` 可能返回一个新的 slice,我们需要接收其返回值。
3128
s = append(s, "d")
3229
s = append(s, "e", "f")
3330
fmt.Println("apd:", s)
3431

35-
// Slice 也可以被 `copy`。这里我们创建一个空的和 `s`
36-
// 相同长度的 slice `c`,并且将 `s` 复制给 `c`。
32+
// slice 还可以 `copy`。这里我们创建一个空的和 `s` 有相同长度的 slice——`c`,
33+
// 然后将 `s` 复制给 `c`。
3734
c := make([]string, len(s))
3835
copy(c, s)
3936
fmt.Println("cpy:", c)
4037

41-
// Slice 支持通过 `slice[low:high]` 语法进行“切片”操
42-
// 作。例如,这里得到一个包含元素 `s[2]`, `s[3]`,
43-
// `s[4]` 的 slice。
38+
// slice 支持通过 `slice[low:high]` 语法进行“切片”操作。
39+
// 例如,右边的操作可以得到一个包含元素 `s[2]`、`s[3]` 和 `s[4]` 的 slice。
4440
l := s[2:5]
4541
fmt.Println("sl1:", l)
4642

47-
// 这个 slice `s[0]` 切片到 `s[5]`(不包含
43+
// 这个 slice 包含从 `s[0]` `s[5]`(不包含 5)的元素
4844
l = s[:5]
4945
fmt.Println("sl2:", l)
5046

51-
// 这个 slice `s[2]` (包含)开始切片
47+
// 这个 slice 包含从 `s[2]`(包含 2)之后的元素
5248
l = s[2:]
5349
fmt.Println("sl3:", l)
5450

5551
// 我们可以在一行代码中声明并初始化一个 slice 变量。
5652
t := []string{"g", "h", "i"}
5753
fmt.Println("dcl:", t)
5854

59-
// Slice 可以组成多维数据结构。内部的 slice 长度可以不
60-
// 一致,这和多维数组不同。
55+
// Slice 可以组成多维数据结构。内部的 slice 长度可以不一致,这一点和多维数组不同。
6156
twoD := make([][]int, 3)
6257
for i := 0; i < 3; i++ {
6358
innerLen := i + 1

examples/slices/slices.sh

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
# 注意,slice 和数组是不同的类型,但是它们通过 `fmt.Println` 打印
2-
# 结果类似。
1+
# 注意,slice 和数组是不同的类型,但它们通过 `fmt.Println` 打印的输出结果是类似的。
32
$ go run slices.go
43
emp: [ ]
54
set: [a b c]
@@ -13,8 +12,6 @@ sl3: [c d e f]
1312
dcl: [g h i]
1413
2d: [[0] [1 2] [2 3 4]]
1514

16-
# 看看这个由 Go 团队撰写的一篇[很棒的博文](http://blog.golang.org/2011/01/go-slices-usage-and-internals.html),
17-
# 了解更多关于 Go 中 slice 的设计和实现细节。
15+
# 看看这个由 Go 团队撰写的一篇[很棒的博文](http://blog.golang.org/2011/01/go-slices-usage-and-internals.html),了解更多关于 Go 中 slice 的设计和实现细节。
1816

19-
# 现在,我们学习了数组和 slice,接下来我们将学习
20-
# Go 中的另一个关键的内建数据类型:map。
17+
# 现在,我们已经学习了数组和 slice,接下来我们将学习 Go 中的另一个重要的内建数据类型:map。

examples/switch/switch.go

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,17 @@ func main() {
1919
fmt.Println("three")
2020
}
2121

22-
// 在同一个 `case` 语句中,你可以使用逗号来分隔多个表
23-
// 达式。在这个例子中,我们还使用了可选的
24-
// `default` 分支。
22+
// 在同一个 `case` 语句中,你可以使用逗号来分隔多个表达式。
23+
// 在这个例子中,我们还使用了可选的 `default` 分支。
2524
switch time.Now().Weekday() {
2625
case time.Saturday, time.Sunday:
2726
fmt.Println("It's the weekend")
2827
default:
2928
fmt.Println("It's a weekday")
3029
}
3130

32-
// 不带表达式的 `switch` 是实现 if/else 逻辑的另一种
33-
// 方式。这里还展示了 `case` 表达式也可以不使用常量。
31+
// 不带表达式的 `switch` 是实现 if/else 逻辑的另一种方式。
32+
// 这里还展示了 `case` 表达式也可以不使用常量。
3433
t := time.Now()
3534
switch {
3635
case t.Hour() < 12:
@@ -39,8 +38,8 @@ func main() {
3938
fmt.Println("It's after noon")
4039
}
4140

42-
// 类型开关 (`type switch`) 比较类型而非值。可以用来发现一个接口值的
43-
// 类型。在这个例子中,变量 `t` 在每个分支中会有相应的类型。
41+
// 类型开关 (`type switch`) 比较类型而非值。可以用来发现一个接口值的类型。
42+
// 在这个例子中,变量 `t` 在每个分支中会有相应的类型。
4443
whatAmI := func(i interface{}) {
4544
switch t := i.(type) {
4645
case bool:

examples/values/values.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
// Go 拥有多种值类型,包括字符串,整型,浮点型,布尔
2-
// 型等。下面是一些基本的例子
1+
// Go 拥有多种值类型,包括字符串、整型、浮点型、布尔型等。
2+
// 下面是一些基础的例子
33

44
package main
55

0 commit comments

Comments
 (0)