为了账号安全,请及时绑定邮箱和手机立即绑定

main 函数是否运行一个 goroutine?

main 函数是否运行一个 goroutine?

Go
翻过高山走不出你 2023-05-08 18:01:33
为什么我们要在结构的类型定义之外声明方法?例如:type antenna struct {    name string    length float32    girth float32    bloodtype string}func (p *antenna) extend() {    p.length += 10}在我看来,该方法可能是结构的一部分?(让我们暂时忽略结构应该是值类型)type antenna struct {    name string    length float32    girth float32    bloodtype string    func extend() {        length += 10    }}这将更类似于传统的 OOP。除了“结构是值类型而类是引用类型”之外,我没有找到任何很好的解释为什么它是这样完成的。我知道其中的区别,但这对我来说不是一个令人满意的答案。无论如何都必须像这样调用该方法:var x = antenna()x.extend() 那么将结构和方法分开有什么意义呢?让它们在代码中直观地组合在一起——就像在典型的 OOP 语言中一样——对我来说似乎有用吗?
查看完整描述

1 回答

?
大话西游666

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)

}


查看完整回答
反对 回复 2023-05-08
  • 1 回答
  • 0 关注
  • 95 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信