From 5b2d1a73c7f98f9c2fa27da5d89e1295cab9b8b0 Mon Sep 17 00:00:00 2001 From: songleo Date: Mon, 14 Mar 2016 17:27:24 +0800 Subject: [PATCH 1/4] modified: eBook/10.1.md --- eBook/10.1.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/eBook/10.1.md b/eBook/10.1.md index ee97b2d..179b586 100644 --- a/eBook/10.1.md +++ b/eBook/10.1.md @@ -35,7 +35,7 @@ t = new(T) 写这条语句的惯用方法是:`t := new(T)`,变量 `t` 是一个指向 `T`的指针,此时结构体字段的值是它们所属类型的零值。 -声明 `var t T` 也会给 `t` 分配内存,并零值化内存,但是这个时候 `t` 是类型T。在这两种方式中,`t` 通常被称做类型 T 的一个实例(instance)或对象(Object)。 +声明 `var t T` 也会给 `t` 分配内存,并零值化内存,但是这个时候 `t` 是类型T。在这两种方式中,`t` 通常被称做类型 T 的一个实例(instance)或对象(object)。 示例 10.1 [structs_fields.go](examples/chapter_10/structs_fields.go) 给出了一个非常简单的例子: @@ -85,7 +85,7 @@ v.i p.i ``` -初始化一个结构体实例(一个结构体字面量:struct-literal)的更简短和惯用的方式如下: +初始化一个结构体实例(一个结构体字面量:struct-literal)的更简短和惯用的方式如下: ```go ms := &struct1{10, 15.5, "Chris"} @@ -120,7 +120,7 @@ intr := Interval{end:5} (C) 在(A)中,值必须以字段在结构体定义时的顺序给出,**&** 不是必须的。(B)显示了另一种方式,字段名加一个冒号放在值的前面,这种情况下值的顺序不必一致,并且某些字段还可以被忽略掉,就像(C)中那样。 -结构体类型和字段的命名遵循可见性规则(第 [4.2](04.2.md) 节),一个导出的结构体类型中有些字段是导出的,另一些不是,这是可能的。 +结构体类型和字段的命名遵循可见性规则(第 [4.2](04.2.md) 节),一个导出的结构体类型中有些字段是导出的,另一些不是,这是可能的。 下图说明了结构体类型实例和一个指向它的指针的内存布局: @@ -138,7 +138,7 @@ type Point struct { x, y int } 类型 strcut1 在定义它的包 pack1 中必须是唯一的,它的完全类型名是:`pack1.struct1`。 -下面的例子 [Listing 10.2—person.go](examples/person.go) 显示了一个结构体 Person,一个方法,方法有一个类型为 `*Person` 的参数(因此对象本身是可以被改变的),以及三种调用这个方法的不同方式: +下面的例子 [Listing 10.2—person.go](examples/chapter_10/struct_pack/person.go) 显示了一个结构体 Person,一个方法,方法有一个类型为 `*Person` 的参数(因此对象本身是可以被改变的),以及三种调用这个方法的不同方式: ```go package main From 14049ae2819461ee1f4c51ac25c522c5b36d381a Mon Sep 17 00:00:00 2001 From: songleo Date: Mon, 14 Mar 2016 17:30:30 +0800 Subject: [PATCH 2/4] modified: eBook/10.1.md --- eBook/10.1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eBook/10.1.md b/eBook/10.1.md index 179b586..a97fb15 100644 --- a/eBook/10.1.md +++ b/eBook/10.1.md @@ -138,7 +138,7 @@ type Point struct { x, y int } 类型 strcut1 在定义它的包 pack1 中必须是唯一的,它的完全类型名是:`pack1.struct1`。 -下面的例子 [Listing 10.2—person.go](examples/chapter_10/struct_pack/person.go) 显示了一个结构体 Person,一个方法,方法有一个类型为 `*Person` 的参数(因此对象本身是可以被改变的),以及三种调用这个方法的不同方式: +下面的例子 [Listing 10.2—person.go](examples/chapter_10/person.go) 显示了一个结构体 Person,一个方法,方法有一个类型为 `*Person` 的参数(因此对象本身是可以被改变的),以及三种调用这个方法的不同方式: ```go package main From 6fc49e7787a5e1372bb3f45a41d462144cd81566 Mon Sep 17 00:00:00 2001 From: songleo Date: Mon, 14 Mar 2016 17:52:50 +0800 Subject: [PATCH 3/4] auto commit --- eBook/10.2.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/eBook/10.2.md b/eBook/10.2.md index 2bce19b..49b9f7e 100644 --- a/eBook/10.2.md +++ b/eBook/10.2.md @@ -2,7 +2,7 @@ ## 10.2.1 结构体工厂 -Go 语言不支持面向对象编程语言中那样的构造子方法,但是可以很容易的在 Go 中实现 “构造子工厂“ 方法。为了方便通常会为类型定义一个工厂,按惯例,工厂的名字以 new 或 New 开头。假设定义了如下的 File 结构体类型: +Go 语言不支持面向对象编程语言中那样的构造子方法,但是可以很容易的在 Go 中实现 “构造子工厂”方法。为了方便通常会为类型定义一个工厂,按惯例,工厂的名字以 new 或 New 开头。假设定义了如下的 File 结构体类型: ```go type File struct { @@ -29,7 +29,7 @@ func NewFile(fd int, name string) *File { f := NewFile(10, "./test.txt") ``` -在 Go 语言中常常像上面这样在工厂方法里使用初始化来简便的实现构造子。 +在 Go 语言中常常像上面这样在工厂方法里使用初始化来简便的实现构造函数。 如果 `File` 是一个结构体类型,那么表达式 `new(File)` 和 `&File{}` 是等价的。 @@ -41,7 +41,7 @@ f := NewFile(10, "./test.txt") **如何强制使用工厂方法** -通过应用可见性规则(参考第 4.2.1、9.5 节)就可以禁止使用 new 函数,强制用户使用工厂方法,从而使类型变成私有的,就像在面向对象语言中那样。 +通过应用可见性规则参考[4.2.1节](04.2.md)、[9.5 节](09.5.md)就可以禁止使用 new 函数,强制用户使用工厂方法,从而使类型变成私有的,就像在面向对象语言中那样。 ```go type matrix struct { @@ -70,9 +70,9 @@ new 和 make 这两个内置函数已经在第 [7.2.4](07.2.md) 节通过切片 现在为止我们已经见到了可以使用 `make()` 的三种类型中的其中两个: - slices / maps / channels(见第 14 章) + slices / maps / channels 参考[第14章](14.0.md) -下面的例子来说明了在映射上使用 new 和 make 的区别,以及可能的发生的错误: +下面的例子说明了在映射上使用 new 和 make 的区别以及可能发生的错误: 示例 10.4 new_make.go(不能编译) @@ -113,5 +113,5 @@ func main() { ## 链接 - [目录](directory.md) -- 上一节:[结构体定义)](10.1.md) +- 上一节:[结构体定义](10.1.md) - 下一节:[使用自定义包中的结构体](10.3.md) From f91237026ed18a7bbf3538de826cf0dacc29a9ee Mon Sep 17 00:00:00 2001 From: songleo Date: Mon, 14 Mar 2016 17:57:54 +0800 Subject: [PATCH 4/4] auto commit --- eBook/10.2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eBook/10.2.md b/eBook/10.2.md index 49b9f7e..49e3b05 100644 --- a/eBook/10.2.md +++ b/eBook/10.2.md @@ -70,7 +70,7 @@ new 和 make 这两个内置函数已经在第 [7.2.4](07.2.md) 节通过切片 现在为止我们已经见到了可以使用 `make()` 的三种类型中的其中两个: - slices / maps / channels 参考[第14章](14.0.md) + slices / maps / channels(见第 14 章) 下面的例子说明了在映射上使用 new 和 make 的区别以及可能发生的错误: