Golang中是如何对参数进行传递的

  介绍

本篇文章为大家展示了Golang中是如何对参数进行传递的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

<强>关于参数传递,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中是如何对参数进行传递的,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

Golang中是如何对参数进行传递的