【Go】方法

go 方法

go 没有 类 !!!

不过可以为结构体类型定义方法

方法是一类带特殊 接收者 参数的函数

方法接收者在函数列表内,位于func关键字和方法名之间

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package main

import (
"fmt"
"math"
)

type Vertex struct {
X, Y float64
}

func (v Vertex) Abs() float64 {
return math.Sqrt(v.X * v.X + v.Y * v.Y)
}

func main() {
v := Vertex{3, 4}
fmt.Println(v.Abs())
}

保存为 helloworld.go,执行结果

1
2
[me@VM_0_14_centos go]# go run helloworld.go 
5

上例中, Abs拥有一个名为 v ,类型为Vertex的接收者

当然,方法也是个函数,只不过它带接收者而已

我们也可以为非结构体类型声明方法
并且,我们只能为同一个包内定义的类型的接收者声明方法

1
2
3
4
5
type MyFloat float64

func (f MyFloat) Abs() float64 {
return float64(f)
}

指针接收者

甚至我们为指针接收者声明方法

1
2
3
4
5
6
7
8
type Vertex struct {
X, Y float64
}

func (v *Vertex) Abs(f float64) {
v.X = v.X * f
v.Y = v.Y * f
}

指针接收者的方法可以修改接收者所指向的值,就像Abs方法内所做的修改v
由于方法经常需要修改它的接收者,因此指针接收者会比较常用

坚持原创技术分享,谢谢鼓励我继续创作!