Go 方法简介

Go 中的 struct 结构类似于面向对象中的类。面向对象中,除了成员变量还有方法。

Go中也有方法,它是一种特殊的函数,定义于struct之上(与struct关联、绑定),被称为structreceiver

它的定义方式大致如下:

  1. type mytype struct{}
  2. func (recv mytype) my_method(para) return_type {}
  3. func (recv *mytype) my_method(para) return_type {}

这表示my_method()函数是绑定在 mytype 这个 struct type 上的,是与之关联的,是独属于 mytype 的。所以,此函数称为 “方法”。所以,方法和字段一样,也是 struct 类型的一种属性。

其中方法名前面的(recv mytype)(recv *mytype)是方法的 receiver,具有了 receiver 的函数才能称之为方法,它将函数和 type 进行了关联,使得函数绑定到 type 上。至于 receiver 的类型是mytype还是*mytype,后面详细解释。

方法调用

定义了属于 mytype 的方法之后,就可以直接通过 mytype 来调用这个方法:

  1. mytype.my_method()

来个实际的例子,定义一个名为 changfangxing 的 struct 类型,属性为长和宽,定义属于 changfangxing 的求面积的方法 area()。

  1. package main
  2. import "fmt"
  3. type changfangxing struct {
  4. length float64
  5. width float64
  6. }
  7. func (c *changfangxing) area() float64 {
  8. return c.length * c.width
  9. }
  10. func main() {
  11. c := &changfangxing{
  12. 2.5,
  13. 4.0,
  14. }
  15. fmt.Printf("%f\n",c.area())
  16. }