1 回答

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超14個(gè)贊
TLR:代碼重用和一致性。
1 - 這可以重用方法:
這是 Go 中類型的關(guān)鍵設(shè)計(jì)原則interface
- 讓我用一個(gè)例子更清楚地說明:考慮你需要對(duì)一片進(jìn)行排序(在這里int
嘗試):
? a := []int{1, 3, 2, 5, 4}
? ? sort.Ints(a)? ?// sort.Sort(sort.IntSlice(a))
? ? fmt.Println(a) // [1 2 3 4 5]
您只需調(diào)用sort.Ints(a)which 然后Sort(IntSlice(a))在標(biāo)準(zhǔn)庫中調(diào)用:
type IntSlice []int
func (x IntSlice) Len() int? ? ? ? ? ?{ return len(x) }
func (x IntSlice) Less(i, j int) bool { return x[i] < x[j] }
func (x IntSlice) Swap(i, j int)? ? ? { x[i], x[j] = x[j], x[i] }
sort.IntSlice sort.Interface將: Len、Less和的 3 種方法附加Swap到類型[]int, 以調(diào)用:
// Sort sorts data in ascending order as determined by the Less method.
// It makes one call to data.Len to determine n and O(n*log(n)) calls to
// data.Less and data.Swap. The sort is not guaranteed to be stable.
func Sort(data Interface) {
? ? n := data.Len()
? ? quickSort(data, 0, n, maxDepth(n))
}
因此,您可以重用標(biāo)準(zhǔn)庫中的方法,而無需再次重新實(shí)現(xiàn)它。
2-您可以定義自己的類型,請(qǐng)參見此示例-此命名類型在此處沒有內(nèi)部-因此方法必須在該類型之外:
package main
import "fmt"
type num int32
func (p *num) inc() {
? ? *p++
}
func main() {
? ? p := num(100)
? ? p.inc()
? ? fmt.Println(p) // 101
}
上面命名的類型 num與這個(gè)用戶定義的類型:通過設(shè)計(jì),這使得兩種類型的Go 語言保持一致:
type Animal struct {
? ? Name? string
? ? moves []move.Direction
}
func (p *Animal) Walk(dir move.Direction) {
? ? p.moves = append(p.moves, dir)
}
- 1 回答
- 0 關(guān)注
- 140 瀏覽
添加回答
舉報(bào)