回到简体

This commit is contained in:
chai2010
2016-02-15 11:06:34 +08:00
parent 9e878f9944
commit 2b37b23285
177 changed files with 2354 additions and 2354 deletions

View File

@@ -1,6 +1,6 @@
### 4.4.1. 結構體面值
### 4.4.1. 结构体面值
結構體值也可以用結構體面值表示,結構體面值可以指定每個成員的值。
结构体值也可以用结构体面值表示,结构体面值可以指定每个成员的值。
```Go
type Point struct{ X, Y int }
@@ -8,17 +8,17 @@ type Point struct{ X, Y int }
p := Point{1, 2}
```
里有兩種形式的結構體面值法,上面的是第一種寫法,要求以結構體成員定義的順序爲每個結構體成員指定一面值。它要求寫代碼和讀代碼的人要記住結構體的每個成員的類型和序,不過結構體成員有細微的調整就可能致上述代不能編譯。因此,上述的法一般在定義結構體的包部使用,或者是在小的結構體中使用,這些結構體的成排列比較規則比如image.Point{x, y}或color.RGBA{red, green, blue, alpha}。
里有两种形式的结构体面值法,上面的是第一种写法,要求以结构体成员定义的顺序为每个结构体成员指定一面值。它要求写代码和读代码的人要记住结构体的每个成员的类型和序,不过结构体成员有细微的整就可能致上述代不能编译。因此,上述的法一般在定义结构体的包部使用,或者是在小的结构体中使用,这些结构体的成排列比较规则比如image.Point{x, y}或color.RGBA{red, green, blue, alpha}。
更常用的是第二種寫法,以成名字和相的值初始化,可以包含部分或全部的成如1.4的Lissajous程序的法:
更常用的是第二种写法,以成名字和相的值初始化,可以包含部分或全部的成如1.4的Lissajous程序的法:
```Go
anim := gif.GIF{LoopCount: nframes}
```
這種形式的結構體面值法中,如果成被忽略的話將默認用零值。因,提供了成的名字,所有成員出現的順序併不重要。
这种形式的结构体面值法中,如果成被忽略的话将默认用零值。因,提供了成的名字,所有成员出现的顺序并不重要。
兩種不同形式的法不能混合使用。而且,你不能企在外部包中用第一種順序賦值的技巧偷偷地初始化結構體中未出的成
两种不同形式的法不能混合使用。而且,你不能企在外部包中用第一种顺序赋值的技巧偷偷地初始化结构体中未出的成
```Go
package p
@@ -30,9 +30,9 @@ var _ = p.T{a: 1, b: 2} // compile error: can't reference a, b
var _ = p.T{1, 2} // compile error: can't reference a, b
```
然上面最一行代碼的編譯錯誤信息中併沒有顯式提到未出的成,但是這樣企圖隱式使用未出成的行也是不允的。
然上面最一行代码的编译错误信息中并没有显式提到未出的成,但是这样企图隐式使用未出成的行也是不允的。
結構體可以作爲函數的參數和返值。例如,這個Scale函數將Point型的值縮放後返迴
结构体可以作为函数的参数和返值。例如,这个Scale函数将Point型的值缩放后返回
```Go
func Scale(p Point, factor int) Point {
@@ -42,7 +42,7 @@ func Scale(p Point, factor int) Point {
fmt.Println(Scale(Point{1, 2}, 5)) // "{5 10}"
```
如果考效率的話,較大的結構體通常用指的方式入和返
如果考效率的话,较大的结构体通常用指的方式入和返
```Go
func Bonus(e *Employee, percent int) int {
@@ -50,7 +50,7 @@ func Bonus(e *Employee, percent int) int {
}
```
如果要在函數內部脩改結構體成員的話,用指針傳入是必的;因在Go言中,所有的函數參數都是值拷貝傳入的,函數參數將不再是函數調用時的原始量。
如果要在函数内部修改结构体成员的话,用指针传入是必的;因在Go言中,所有的函数参数都是值拷贝传入的,函数参数将不再是函数调用时的原始量。
```Go
func AwardAnnualRaise(e *Employee) {
@@ -58,17 +58,17 @@ func AwardAnnualRaise(e *Employee) {
}
```
爲結構體通常通過指針處理,可以用下面的寫法來創建併初始化一個結構體變量,併返迴結構體的地址:
为结构体通常通过指针处理,可以用下面的写法来创建并初始化一个结构体变量,并返回结构体的地址:
```Go
pp := &Point{1, 2}
```
它是下面的句是等
它是下面的句是等
```Go
pp := new(Point)
*pp = Point{1, 2}
```
&Point{1, 2}法可以直接在表式中使用,比如一個函數調用。
&Point{1, 2}法可以直接在表式中使用,比如一个函数调用。