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

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上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

形参和实际参数内存地址一样,不代表是引用类型

func main() {
	slice :=[]int{1,2,3,4}
	fmt.Printf("first:%p\n",slice)
	fmt.Println("second",slice,len(slice),cap(slice))
	getSlice(slice)


![img](https://img-blog.csdnimg.cn/img_convert/20390ac0a3ffac036582c8b531268dd5.png)
![img](https://img-blog.csdnimg.cn/img_convert/4bfbdca98f1ba98276007daa25c27e74.png)
![img](https://img-blog.csdnimg.cn/img_convert/ef054f2fb795dda8b370a34461f10581.png)

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

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值