介绍
本篇文章为大家展示了Golang中是如何对参数进行传递的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
<强>关于参数传递,Golang文档中有这么一句:强>
评估后,调用的参数是通过价值
函数和被调用的函数开始执行。
函数调用参数均为值传递,不是指针传递或引用传递。经测试引申出来,当参数变量为指针或隐式指针类型,参数传递方式也是传值(指针本身的副本)
片是最常用的数据结构之一,下面以片为例,解释Golang的参数传递机制。
<强>片数据结构如下:强>
<强>示例代码:强>
package 主要 import “fmt" func main () { ,slice :=, (int [],, 3,, 5) ,fmt.Println(“前:“,,片) ,changeSliceMember(片) ,fmt.Println(“后:“,,片) } func changeSliceMember (slice int []), { ,if len(片),祝辞,1,{ ,片[0]=9 ,} }
<>强函数执行结果为:强>
在:(0,0,0) 后:[9,0,0)
<强>解释:强>
从数据结构图中可看的出,切片可以理解成结构体类型,包含底层数组首元素地址,数组len,容量三个字段,切片对象在参数传值过程中,把三个字段的值传递过去了,实际上changeSliceMember函数内片在内存中的地址和中主要的片内存地址不一样,只是字段值是一样的,而第一个字段指针的值就是底层数组首元素地址,因此可以直接改变元素内容
<强>可以与下面代码做对比,理解:强>
package 主要 func main (), { ,value :=,新(int) ,modifyFunc(值) ,println(“主:“,,值) } func modifyFunc (value * int), { ,value =nil ,println (“modifyFunc:“,,值) }
<>强执行结果:强>
modifyFunc: 0 x0 主要:0 xc820049f30
可以看的出,即使传值为指针,仍未改变变量主要在中值的值,因为modifyFunc中值的值为指针,和中主要的价值值一样,但是俩对象本身是两个对象,读者可以细细体会
上述内容就是Golang中是如何对参数进行传递的,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。