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