ch6: fix code format

This commit is contained in:
chai2010 2016-01-21 10:08:07 +08:00
parent 20a8cf71b9
commit 2420954025
7 changed files with 90 additions and 88 deletions

View File

@ -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),早期的面向對象語言留下的遺産將調用一個方法稱爲“向一個對象發送消息”。

View File

@ -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")

View File

@ -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

View File

@ -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類型來定義方法也有了手段。

View File

@ -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 {