type Student struct {
Mame string `json:"mame" form:"fname"`
Age int `json:"jage" from:"fage"`
Email string
}
func (s Student) Change(i int) {
s.Age = i
}
func (s *Student) Change2(i int) {
s.Age = i
}
change方法 是值接受者:它可以用指针类型调用也可以用值类型调用
用值类型调用:不会改变原有值
student := myprogram.Student{
Mame: "",
Age: 0,
Email: "",
}
student.Change(3)
fmt.Printf("%+v",student)
结果:{Mame: Age:0 Email:}
用指针类型调用:同样也不会改变原来的值,相当于go进行了指针自动 解析 *student 解引用为值
student := &myprogram.Student{
Mame: "",
Age: 0,
Email: "",
}
student.Change(3)
fmt.Printf("%+v",student)
结果:&{Mame: Age:0 Email:}
change方法 是指针接受者:同样它可以用指针类型调用也可以用值类型调用
指针类型调用,改变了值
student := &myprogram.Student{
Mame: "",
Age: 0,
Email: "",
}
student.Change2(3)
结果:&{Mame: Age:3 Email:}
值类型调用,改变了原来的值,相当于go 进行了 自动转换 使用student 的引用即&student进行调用。
student := myprogram.Student{
Mame: "",
Age: 0,
Email: "",
}
student.Change2(3)
fmt.Printf("%+v",student)
结果:{Mame: Age:3 Email:}
1 值类型或者指针类型都可以互相调用值接受者或者指针接受者
2 是否改变原来的值 取决于接受者是值类型还是指针类型