方法:方法属于特定的类型
方法 :该类型的一个功能函数
//该方法 专属于 接收者
func (接收者变量 接收者类型) 方法名(参数列表) (返回参数) {
函数体
}
接收者:
值类型的接收者
Go语言会在代码运行时将接收者的值复制一份。在值类型接收者的方法中可以获取接收者的成员值,但修改操作只是针对副本,无法修改接收者变量本身。
指针类型的接收者
指针类型的接受者由一个结构体的指针组成,通过该指针,能修改这个结构体的任意成员变量。
什么时候需要使用指针类型的接收者
- 需要修改接收者中的值
- 接收者是拷贝代价比较大的大对象
- 保证一致性,如果有某个方法使用了指针接收者,那么其他的方法也应该使用指针接收者。
函数:不属于任何的类型
值接收者和指针接收者实现接口的区别
type Mover interface {
move()
}
type dog struct {}
值接收者实现接口
指针类型,值类型变量都可以直接赋值给接口变量
func (d dog) move() {
fmt.Println("狗会动")
}
func main() {
var x Mover
var wangcai = dog{} // 旺财是dog类型
x = wangcai // x可以接收dog类型
var fugui = &dog{} // 富贵是*dog类型
x = fugui // x可以接收*dog类型
x.move()
}
指针接收者实现接口
只有指针类型可以直接赋值给接口变量
func (d *dog) move() {
fmt.Println("狗会动")
}
func main() {
var x Mover
var wangcai = dog{} // 旺财是dog类型
x = wangcai // x不可以接收dog类型
var fugui = &dog{} // 富贵是*dog类型
x = fugui // x可以接收*dog类型
}