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 *Circle)在area函数的定义中被称为接收者,并且main我们可以在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))

}

现在这只是两个代码片段之间的语法差异,还是在更深层次上发生了结构上的不同?


繁华开满天机
浏览 192回答 1
1回答

慕森王

区别不仅仅是语法。使用方法,您的圆类型可以实现接口,但该功能不允许您这样做:type areaer interface {    area() float64}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go