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

img
img

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

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

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

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](https://img-blog.csdnimg.cn/img_convert/26b3fb6c6e94eca2a2382682b82900a5.png)
![img](https://img-blog.csdnimg.cn/img_convert/f321534fa30e8e1da0615e030626065f.png)
![img](https://img-blog.csdnimg.cn/img_convert/72cdb9b84b316a8d616a4e0ded194c53.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618658159)**

、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618658159)**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值