切片基础知识
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
郑重声明:
本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,不存在任何商业目的与商业用途。 若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。
我们不承担任何技术及捕鱼10元起上10元下的版权问题,且不对任何资源负法律责任。
如遇到资源无法下载,请点击这里失效报错。失效报错提交后记得查看你的留言信息,24小时之内反馈信息。
如有侵犯您的捕鱼10元起上10元下的版权,请给我们私信,我们会尽快处理,并诚恳的向你道歉!