golang切片传参(golang二维切片)

切片基础知识

Golang编程语言中的切片(slice)是一个非常重要的数据类型,它在程序开发过程中经常使用,尤其是在动态数组的创建和操作上。切片是由一个指向数组的指针、切片的长度和切片的容量构成的。容量指底层数组的可用长度,长度指是切片中当前存放的元素个数。切片的特点是长度可变化,在添加或删除元素时只需要改变切片的长度即可。

切片传参方式

在Golang中,函数参数传递主要分为值传递和引用传递,切片类型的传参属于引用传递。简单来讲,引用传递是将函数实参的地址传递给形参。这种方式可以对实参原始值进行修改,但是对形参进行修改不会影响实参的原值。

在函数中修改切片的实例代码如下:

```
func changeSlice(s []int) {
s[0] = 1
}

func main() {
s := []int{0}
fmt.Println(s) // [0]
changeSlice(s)
fmt.Println(s) // [1]
}
```

以上代码中,changeSlice函数的参数s是一个切片类型。在main函数中,定义了一个长度为1的切片s,并且打印出来的结果是[0]。接着调用了changeSlice函数,将s传入函数中,changeSlice函数中的操作是将第一个元素修改为1,然后回到main函数中,重新打印切片s,结果为[1]。

切片的指针传递

虽然切片的传递较原始类型的传递而言是传址即指针传递,但Go的Gc垃圾回收机制会及时回收变量的内存,所以在函数执行完毕后,变量指向的内存地址会被回收。就算在函数内部重新分配一个切片,也不会影响传入的切片变量和其所指向的底层数组。因此,如果想要在函数内部实现对传入切片的修改,可采用切片指针的方式进行传递。

在函数中使用切片指针的实例代码如下:

```
func changeSlice(s *[]int) {
(*s)[0] = 1
}

func main() {
s := []int{0}
fmt.Println(s) // [0]
changeSlice(&s)
fmt.Println(s) // [1]
}
```

以上代码中,在changeSlice函数中将参数类型定义为*slice,使用*访问实参所指向的切片,然后将第一个元素修改为1。在main函数调用changeSlice时,需要将切片的地址传递给函数,使用&符号获取切片的地址,即可实现函数内改变原始切片的值。

总之,在Go语言中,关于切片的引用传递与指针传递,需要根据具体场景合理选择。其中,指针传递的方式可以方便地在函数内部进行操作,在实际开发中也广泛应用。

本文来自投稿,不代表亲测学习网立场,如若转载,请注明出处:https://www.qince.net/golang-3viv.html

郑重声明:

本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,不存在任何商业目的与商业用途。 若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。

我们不承担任何技术及版权问题,且不对任何资源负法律责任。

如遇到资源无法下载,请点击这里失效报错。失效报错提交后记得查看你的留言信息,24小时之内反馈信息。

如有侵犯您的版权,请给我们私信,我们会尽快处理,并诚恳的向你道歉!

(0)
上一篇 2023年5月2日 上午3:09
下一篇 2023年5月2日 上午3:10

猜你喜欢