go函数参数传递到底是值传递还是引用传递?_go interface{}传参是值传递吗(3)

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

先说结果吧,重要的事情说N遍。

go函数全是值传递,没有引用传递!!!go函数全是值传递,没有引用传递!!!go函数全是值传递,没有引用传递!!!go函数全是值传递,没有引用传递!!!go函数全是值传递,没有引用传递!!!······

值传递

值传递(Pass by Value)是一种函数参数传递方式。在值传递中,当把变量作为参数传递给函数时,实际上传递的是变量的值的副本。这意味着在函数内部对参数的任何修改都不会影响到原始变量。值传递在函数调用时创建了原始数据的副本,因此函数内部的操作不会影响到原始数据。

引用传递

引用传递(Pass by Reference)是一种函数参数传递方式。在引用传递中,当把变量作为参数传递给函数时,实际上传递的是变量的内存地址(或者说引用)。这意味着在函数内部对参数的任何修改都会影响到原始变量,因为函数内部操作的是原始变量的地址。

主要有问题的就应该是slice,接下来会一步一步解析,slice作为函数参数时到底是什么传递

指针

形参和实际参数内存地址不一样,证明是值传递,由于形参和实参是指针,指向同一个变量。函数内对指针指向变量的修改,会修改原内容数据

func main() {
	var a int = 666
	b := &a
	fmt.Println("firstly",&b)
	getB(b)
	fmt.Println("thirdly",\*b)
}

func getB(b \*int){
	fmt.Println("secondly",&b)
	\*b=888
}

firstly 0xc000006028
secondly 0xc000006038
thirdly 888

slice

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 20
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值