mirror of
https://github.com/gopl-zh/gopl-zh.github.com.git
synced 2024-12-26 06:46:27 +00:00
ch6: fix code format
This commit is contained in:
parent
20a8cf71b9
commit
2420954025
@ -4,8 +4,8 @@
|
|||||||
|
|
||||||
下面來寫我們第一個方法的例子,這個例子在package geometry下:
|
下面來寫我們第一個方法的例子,這個例子在package geometry下:
|
||||||
|
|
||||||
|
<u><i>gopl.io/ch6/geometry</i></u>
|
||||||
```go
|
```go
|
||||||
gopl.io/ch6/geometry
|
|
||||||
package geometry
|
package geometry
|
||||||
|
|
||||||
import "math"
|
import "math"
|
||||||
@ -17,12 +17,10 @@ func Distance(p, q Point) float64 {
|
|||||||
return math.Hypot(q.X-p.X, q.Y-p.Y)
|
return math.Hypot(q.X-p.X, q.Y-p.Y)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// same thing, but as a method of the Point type
|
// same thing, but as a method of the Point type
|
||||||
func (p Point) Distance(q Point) float64 {
|
func (p Point) Distance(q Point) float64 {
|
||||||
return math.Hypot(q.X-p.X, q.Y-p.Y)
|
return math.Hypot(q.X-p.X, q.Y-p.Y)
|
||||||
}
|
}
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
上面的代碼里那個附加的參數p,叫做方法的接收器(receiver),早期的面向對象語言留下的遺産將調用一個方法稱爲“向一個對象發送消息”。
|
上面的代碼里那個附加的參數p,叫做方法的接收器(receiver),早期的面向對象語言留下的遺産將調用一個方法稱爲“向一個對象發送消息”。
|
||||||
|
@ -22,8 +22,8 @@ func (list *IntList) Sum() int {
|
|||||||
|
|
||||||
下面是net/url包里Values類型定義的一部分。
|
下面是net/url包里Values類型定義的一部分。
|
||||||
|
|
||||||
|
<u><i>net/url</i></u>
|
||||||
```go
|
```go
|
||||||
net/url
|
|
||||||
package url
|
package url
|
||||||
|
|
||||||
// Values maps a string key to a list of values.
|
// Values maps a string key to a list of values.
|
||||||
@ -45,8 +45,8 @@ func (v Values) Add(key, value string) {
|
|||||||
|
|
||||||
這個定義向外部暴露了一個map的類型的變量,併且提供了一些能夠簡單操作這個map的方法。這個map的value字段是一個string的slice,所以這個Values是一個多維map。客戶端使用這個變量的時候可以使用map固有的一些操作(make,切片,m[key]等等),也可以使用這里提供的操作方法,或者兩者併用,都是可以的:
|
這個定義向外部暴露了一個map的類型的變量,併且提供了一些能夠簡單操作這個map的方法。這個map的value字段是一個string的slice,所以這個Values是一個多維map。客戶端使用這個變量的時候可以使用map固有的一些操作(make,切片,m[key]等等),也可以使用這里提供的操作方法,或者兩者併用,都是可以的:
|
||||||
|
|
||||||
|
<u><i>gopl.io/ch6/urlvalues</i></u>
|
||||||
```go
|
```go
|
||||||
gopl.io/ch6/urlvalues
|
|
||||||
m := url.Values{"lang": {"en"}} // direct construction
|
m := url.Values{"lang": {"en"}} // direct construction
|
||||||
m.Add("item", "1")
|
m.Add("item", "1")
|
||||||
m.Add("item", "2")
|
m.Add("item", "2")
|
||||||
|
@ -27,6 +27,7 @@ r := &Point{1, 2}
|
|||||||
r.ScaleBy(2)
|
r.ScaleBy(2)
|
||||||
fmt.Println(*r) // "{2, 4}"
|
fmt.Println(*r) // "{2, 4}"
|
||||||
```
|
```
|
||||||
|
|
||||||
或者這樣:
|
或者這樣:
|
||||||
|
|
||||||
```go
|
```go
|
||||||
|
@ -2,10 +2,12 @@
|
|||||||
|
|
||||||
來看看ColoredPoint這個類型:
|
來看看ColoredPoint這個類型:
|
||||||
|
|
||||||
|
<u><i>gopl.io/ch6/coloredpoint</i></u>
|
||||||
```go
|
```go
|
||||||
gopl.io/ch6/coloredpoint
|
|
||||||
import "image/color"
|
import "image/color"
|
||||||
|
|
||||||
type Point struct{ X, Y float64 }
|
type Point struct{ X, Y float64 }
|
||||||
|
|
||||||
type ColoredPoint struct {
|
type ColoredPoint struct {
|
||||||
Point
|
Point
|
||||||
Color color.RGBA
|
Color color.RGBA
|
||||||
@ -81,6 +83,7 @@ type ColoredPoint struct {
|
|||||||
color.RGBA
|
color.RGBA
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
然後這種類型的值便會擁有Point和RGBA類型的所有方法,以及直接定義在ColoredPoint中的方法。當編譯器解析一個選擇器到方法時,比如p.ScaleBy,它會首先去找直接定義在這個類型里的ScaleBy方法,然後找被ColoredPoint的內嵌字段們引入的方法,然後去找Point和RGBA的內嵌字段引入的方法,然後一直遞歸向下找。如果選擇器有二義性的話編譯器會報錯,比如你在同一級里有兩個同名的方法。
|
然後這種類型的值便會擁有Point和RGBA類型的所有方法,以及直接定義在ColoredPoint中的方法。當編譯器解析一個選擇器到方法時,比如p.ScaleBy,它會首先去找直接定義在這個類型里的ScaleBy方法,然後找被ColoredPoint的內嵌字段們引入的方法,然後去找Point和RGBA的內嵌字段引入的方法,然後一直遞歸向下找。如果選擇器有二義性的話編譯器會報錯,比如你在同一級里有兩個同名的方法。
|
||||||
|
|
||||||
方法隻能在命名類型(像Point)或者指向類型的指針上定義,但是多虧了內嵌,有些時候我們給匿名struct類型來定義方法也有了手段。
|
方法隻能在命名類型(像Point)或者指向類型的指針上定義,但是多虧了內嵌,有些時候我們給匿名struct類型來定義方法也有了手段。
|
||||||
|
@ -4,8 +4,8 @@ Go語言里的集合一般會用map[T]bool這種形式來表示,T代表元素
|
|||||||
|
|
||||||
一個bit數組通常會用一個無符號數或者稱之爲“字”的slice或者來表示,每一個元素的每一位都表示集合里的一個值。當集合的第i位被設置時,我們才説這個集合包含元素i。下面的這個程序展示了一個簡單的bit數組類型,併且實現了三個函數來對這個bit數組來進行操作:
|
一個bit數組通常會用一個無符號數或者稱之爲“字”的slice或者來表示,每一個元素的每一位都表示集合里的一個值。當集合的第i位被設置時,我們才説這個集合包含元素i。下面的這個程序展示了一個簡單的bit數組類型,併且實現了三個函數來對這個bit數組來進行操作:
|
||||||
|
|
||||||
|
<u><i>gopl.io/ch6/intset</i></u>
|
||||||
```go
|
```go
|
||||||
gopl.io/ch6/intset
|
|
||||||
// An IntSet is a set of small non-negative integers.
|
// An IntSet is a set of small non-negative integers.
|
||||||
// Its zero value represents the empty set.
|
// Its zero value represents the empty set.
|
||||||
type IntSet struct {
|
type IntSet struct {
|
||||||
|
Loading…
Reference in New Issue
Block a user