Răsfoiți Sursa

修改ch10 ch10.1中的错别字及格式

leisore 10 ani în urmă
părinte
comite
a61f6e7171
2 a modificat fișierele cu 47 adăugiri și 47 ștergeri
  1. 2 2
      eBook/10.0.md
  2. 45 45
      eBook/10.1.md

+ 2 - 2
eBook/10.0.md

@@ -1,7 +1,7 @@
 # 10 结构(struct)与方法(method)
 
-Go通过类型别名(alias types)或结构体的形式支持用户自定义类型,或者叫定制类型。一个带属性的结构体试图表示一个现实世界中的实体。结构体是复合类型(omposite types),当需要定义一个类型,它由一系列属性组成,每个属性都有自己的类型和值,此时就应该使用结构体,它把数据聚集在一起。然后可以访问这些数据,就好像它是一个独立实体的一部分。
+Go通过类型别名(alias types)或结构体的形式支持用户自定义类型,或者叫定制类型。一个带属性的结构体试图表示一个现实世界中的实体。结构体是复合类型(omposite types),当需要定义一个类型,它由一系列属性组成,每个属性都有自己的类型和值的时候,就应该使用结构体,它把数据聚集在一起。然后可以访问这些数据,就好像它是一个独立实体的一部分。
 
 组成结构体类型的那些数据称为 *成员(fields)*。一个成员有一个类型和一个名字;在一个结构体中,成员名字必须是唯一的。
 
-结构体的概念在软件工程上旧的术语叫ADT(抽象数据类型:Abstract Data Type),在一些老的编程语言中叫*记录(Record)*,比如Cobol,在C家族的编程语言中它也存在,并且名字也是*struct*,在面向对象的编程语言中,跟一个无方法的轻量级类一样。不过因为Go语言中没有类的概念,因此在Go中结构体有着更为重要的地位。
+结构体的概念在软件工程上旧的术语叫ADT(抽象数据类型:Abstract Data Type),在一些老的编程语言中叫*记录(Record)*,比如Cobol,在C家族的编程语言中它也存在,并且名字也是*struct*,在面向对象的编程语言中,跟一个无方法的轻量级类一样。不过因为Go语言中没有类的概念,因此在Go中结构体有着更为重要的地位。

+ 45 - 45
eBook/10.1.md

@@ -2,13 +2,13 @@
 
 结构体定义的一般方式如下:
 
-    ```go
-    type identifier struct {
-        field1 type1
-        field2 type2
-        ...
-    }
-    ```
+```go
+type identifier struct {
+    field1 type1
+    field2 type2
+    ...
+}
+```
 
 ` type T struct {a, b int}`也是合法的语法,它更适用于简单的结构体。
 
@@ -16,11 +16,11 @@
 
 成员可以是任何类型,甚至是结构体本身(参考[10.5](10.5.md)),可以是函数或者接口(参考第11章)。可以定义结构体类型的一个变量,然后给它的成员像下面这样赋值:
 
-    ```go
-    var s T
-    s.a = 5
-    s.b = 8
-    ```
+```go
+var s T
+s.a = 5
+s.b = 8
+```
 
 数组可以看作是一种结构体类型,不过它使用下标而不是命名的成员。
 
@@ -28,10 +28,10 @@
 
 使用*new*函数给一个新的结构体变量分配内存,它返回指向已分配内存的指针:`var t *T = new(T)`,如果需要可以把这条语句放在不同的行(比如定义是包范围的,但是分配却没有必要在开始就做)。
 
-    ```go
-    var t *T
-    t = new(T)
-    ```
+```go
+var t *T
+t = new(T)
+```
 
 写这条语句的惯用法是:`t := new(T)`,变量*t*是一个指向`T`的指针,此时结构体成员的值是它们所属类型的零值。
 
@@ -77,46 +77,46 @@ func main {
 
 在Go中这叫*选择器(selector)*。无论变量是一个结构体类型还是一个结构体类型指针,都使用同样的选择器符(selector-notation)来引用结构体的成员:
 
-    ```go
-    type myStruct struct { i int }
-    var v myStruct    // v has struct type
-    var p *myStruct   // p is a pointer to a struct
-    v.i 
-    p.i
-    ```
+```go
+type myStruct struct { i int }
+var v myStruct    // v has struct type
+var p *myStruct   // p is a pointer to a struct
+v.i 
+p.i
+```
 
 初始化一个结构体实例(一个结构体字面量:struct-literal)的更简短和惯用的方式如下:
 
-    ```go
-        ms := &struct1{10, 15.5, "Chris"}
-        // 此时ms的类型是 *struct1
-    ```
+```go
+    ms := &struct1{10, 15.5, "Chris"}
+    // 此时ms的类型是 *struct1
+```
 
 或者:
 
-    ```go
-        var mt struct1
-        ms := struct1{10, 15.5, "Chris"}
-    ```
+```go
+    var mt struct1
+    ms := struct1{10, 15.5, "Chris"}
+```
 
 混合字面量语法(composite  literal  syntax) ` &struct1{a, b, c}` 是一种简写,底层仍然会调用` new ()`,这里值的顺序必须按照成员顺序来写。在下面的例子中能看到可以通过在值的前面放上成员名来初始化值。表达式` new(Type)` 和` &Type{}`是等价的。
 
 结构体的典型例子是一个时间间隔(开始和结束时间以秒为单位):
 
-    ```go
-    type Interval struct {
-        start int
-        end   int
-    }
-    ```
+```go
+type Interval struct {
+    start int
+    end   int
+}
+```
 
 初始化方式:
 
-    ```go
-    intr := Interval(0, 3)            (A)
-    intr := Interval(end:5, start:1)  (B)
-    intr := Interval(end:5)           (C)
-    ```
+```go
+intr := Interval(0, 3)            (A)
+intr := Interval(end:5, start:1)  (B)
+intr := Interval(end:5)           (C)
+```
 
 在(A)中值必须以成员在结构体定义时的顺序给出,*&*不是必须的。(B)显示了另一种方式,成员名加上一个冒号在值的前面,这种情况下值的顺序不必一致,并且某些成员还可以被忽略掉,就像(C)那样。
 
@@ -124,9 +124,9 @@ func main {
 
 下图说明了结构体类型实例和一个指向它的指针的内存布局:
 
-    ```go
-    type Point struct { x, y int }
-    ```
+```go
+type Point struct { x, y int }
+```
 
 使用new初始化: