Go 围棋中的方法和接受者

Go 围棋中的方法和接受者,go,Go,我在理解围棋的方法和接受者方面有问题。假设我们有以下代码: package main import ("fmt"; "math") type Circle struct { x, y, r float64 } func (c *Circle) area() float64 { return math.Pi * c.r * c.r } func main() { c := Circle{0, 0, 5} fmt.Println(c.area()) } (c*圈)在

我在理解围棋的方法和接受者方面有问题。假设我们有以下代码:

package main
import ("fmt"; "math")
type Circle struct {
    x, y, r float64
}
func (c *Circle) area() float64 {
    return math.Pi * c.r * c.r
}
func main() {
    c := Circle{0, 0, 5}
    fmt.Println(c.area())
}
(c*圈)
区域
函数的定义中称为接收器,在
中,我们可以调用区域并通过引用传递
c
,而无需使用指针。我可以按以下方式编辑代码,其工作原理相同:

package main
import ("fmt"; "math")
type Circle struct {
    x, y, r float64
}
func circleArea(c *Circle) float64 {
    return math.Pi * c.r*c.r
}
func main() {
    c := Circle{0, 0, 5}
    fmt.Println(circleArea(&c))
}

这仅仅是两段代码之间的语法差异,还是在更深层次上存在结构上的差异

区别不仅仅在于语法。通过一种方法,您的圆圈类型可以实现一个接口,但函数不允许您这样做:

type areaer interface {
    area() float64
}