既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
先说结果吧,重要的事情说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
![img](https://img-blog.csdnimg.cn/img_convert/9cf83031de1d58d1d5e04e847d6fc43a.png)
![img](https://img-blog.csdnimg.cn/img_convert/39e913f0cb6fcfcecc5f161a7720185c.png)
![img](https://img-blog.csdnimg.cn/img_convert/90212ca3fc4f54cdfb1c7081e768eac9.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618658159)**
、大纲路线、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618658159)**