golang中方法是一个函数加上一个函数的接受者,接受者可以是值类型也可以是指针类型。关键字func
和函数名之间的部分为接受者。
type Student struct {
name string
age int
}
func (stu Student) Show() {
fmt.Printf("name: %s, age = %d\n", stu.name, stu.age)
}
值类型的接受者,不可以改变接受者的值;指针类型的接受者,可以改变接受者的值。无论接受者是值类型或者是指针类型,在变量调用方法的时候,变量会被自动的转换为相对应的类型。变量的值能否在方法中改变与变量的声明方式无关,只与接受者有关。
使用指针接受者的原因:
- 指针接受者能够改变指针接受者所指向的值。
- 在每次调用方法的时候避免值复制,如果值是比较大的struct的时候使用指针接受者是非常高效的。
网友评论