golang方法的介绍
1、定义
func (接收者类型) 方法名 (参数列表) (返回值列表)
func (rt ReceiverType) MethodName(parameters) (returns)
type User struct {
name string
age int
}
func (u User) SetName(name string) {
u.name = name
}
func (u *User) SetAge(age int) {
u.age = age
}
2、值接收者
func (u User) SetName(name string) {
u.name = name
}
func main() {
u1 := &User{"张三", 18}
fmt.Println(u1)
u1.SetName("李四")
u1.SetAge(19)
//指针对象调用值接收者方法,相当于(*u1).SetName("李四")
fmt.Println(u1)
}
&{张三 18}
&{张三 19}
u1 可以调用值接收者 SetName 方法,相当于先取值,再调用,其结果同值传递一样不会更新到原始指针对象。
3、指针接收者
func (u *User) SetAge(age int) {
u.age = age
}
func main() {
u1 := &User{"张三", 18}
fmt.Println(u1)
u1.SetName("李四")
u1.SetAge(19)
//指针对象调用值接收者方法,相当于(*u1).SetName("李四")
fmt.Println(u1)
u2 := User{"李四", 19}
fmt.Println(u2)
u2.SetName("张三")
u2.SetAge(18)
//值对象调用指针接收者方法,相当于(&u2).SetAge(18)
fmt.Println(u2)
}
&{张三 18}
&{张三 19}
{李四 19}
{李四 18}
u2 可以调用指针接收者 SetAge方法,相当于先取指针,再调用,其结果同指针传递一样会更新原始值。
4、值接收者 和 指针接收者 的区别使用
1)无论是值对象调用,还是指针对象调用,其结果根据是值接收者还是指针接收者而定;
2)值接收者的方法,方法内的操作不更新到原始的传递对象;
3)指针接收者的方法,方法内的操作会更新到原始的传递对象;
(^ _ ^)/ 新手误怪,如有错误,欢迎指正修改!