关于struct方法的值接受者和指针接受者问题

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 是否改变原来的值 取决于接受者是值类型还是指针类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值