1 回答
TA贡献1817条经验 获得超14个赞
TLR:代码重用和一致性。
1 - 这可以重用方法:
这是 Go 中类型的关键设计原则interface
- 让我用一个例子更清楚地说明:考虑你需要对一片进行排序(在这里int
尝试):
a := []int{1, 3, 2, 5, 4}
sort.Ints(a) // sort.Sort(sort.IntSlice(a))
fmt.Println(a) // [1 2 3 4 5]
您只需调用sort.Ints(a)which 然后Sort(IntSlice(a))在标准库中调用:
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, 以调用:
// 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))
}
因此,您可以重用标准库中的方法,而无需再次重新实现它。
2-您可以定义自己的类型,请参见此示例-此命名类型在此处没有内部-因此方法必须在该类型之外:
package main
import "fmt"
type num int32
func (p *num) inc() {
*p++
}
func main() {
p := num(100)
p.inc()
fmt.Println(p) // 101
}
上面命名的类型 num与这个用户定义的类型:通过设计,这使得两种类型的Go 语言保持一致:
type Animal struct {
Name string
moves []move.Direction
}
func (p *Animal) Walk(dir move.Direction) {
p.moves = append(p.moves, dir)
}
- 1 回答
- 0 关注
- 95 浏览
添加回答
举报