mirror of
https://github.com/gopl-zh/gopl-zh.github.com.git
synced 2025-08-06 23:41:43 +00:00
ch4-4 review
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
### 4.4.1. 結構體面值
|
||||
|
||||
結構體值可以用結構體面值表示,結構體面值可以指定每個成員的值。
|
||||
結構體值也可以用結構體面值表示,結構體面值可以指定每個成員的值。
|
||||
|
||||
```Go
|
||||
type Point struct{ X, Y int }
|
||||
@@ -8,7 +8,7 @@ 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程序的寫法:
|
||||
|
||||
@@ -50,7 +50,7 @@ func Bonus(e *Employee, percent int) int {
|
||||
}
|
||||
```
|
||||
|
||||
如果要在函數內部脩改結構體成員的話,用指針傳入是必鬚的;因爲在Go語言中,所有的函數參數都是值拷貝出入的,函數參數將不再是函數調用時的原始變量。
|
||||
如果要在函數內部脩改結構體成員的話,用指針傳入是必鬚的;因爲在Go語言中,所有的函數參數都是值拷貝傳入的,函數參數將不再是函數調用時的原始變量。
|
||||
|
||||
```Go
|
||||
func AwardAnnualRaise(e *Employee) {
|
||||
@@ -72,5 +72,3 @@ pp := new(Point)
|
||||
```
|
||||
|
||||
不過&Point{1, 2}寫法可以直接在表達式中使用,比如一個函數調用。
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user