定义一个计算长方形面积的函数1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20package main
import (
"fmt"
)
type Rectangle struct {
width, height float64
}
func area(r Rectangle) float64 {
return r.width * r.height
}
func main() {
r1 := Rectangle{12, 2}
r2 := Rectangle{9, 4}
fmt.Println("Area of r1 is: ", area(r1))
fmt.Println("Area of r2 is: ", area(r2))
}
上面这种方式定义是一个可以求长方形面积的函数area
。这个方法并不是属于Rectangle
这个对象。如果要把area
当作Rectangle
的method
,也就是把area
当作Rectangle
的一个 属性,可以使用接收者。
1 | // 虽然method名称一样,但是如果接收者不一样,那么method就不一样 |
接收者的值传递OR引用传递
1 | package main |
把area
method改为如下:1
2
3
4func (r *Rectangle) area() float64 {
r.width = 10
return r.width*r.height
}
结果如下:
如果接收者前面没有加*
号则表示方法使用的是引用传递,指针作为Receiver
会对实例对象的内容发生操作,如果没加星号则是以值传递,只是对实例的副本进行操作。
Ref:
1.go web编程