Go中的方法和接收器

时间:2014-10-14 21:20:17

标签: 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))
}

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

1 个答案:

答案 0 :(得分:6)

区别不仅仅是语法。使用方法,您的圈子类型可以实现一个界面,但该功能不允许您这样做:

type areaer interface {
    area() float64
}