【golang】slice底层函数传参原理易错点
切片的底层结构主要包括引用数组的地址data,切片长度len与切片容量cap。
<pre><code class="lang-go hljs">type SliceHeader struct { Data uintptr Len int Cap int } </code></code></pre> <h4>以切片为参数调用函数</h4>Go语言中,如果以切片为参数调用函数时,有时候会给人一种参数采用了传引用的方式的假象:因为
在被调用函数内部可以修改传入的切片的元素。
任何可以通过函数参数修改调用参数的情形,都是因为函数参数中传人了指针参数(只有底部结构有指针地址类型,都可以改变原值,因为虽然函数拷贝了参数的地址,但地址指向一个内存,所以能修改原来值)
因为add函数修改了指针指向内存的值,所以输出:
<pre><code class="lang-go hljs">[99,0] </code></code></pre>如果一切都为了说明以上特性,那这边文章将毫无意义,所以但是,但是................................................
切片传入函数,不仅结构中地址指针拷贝了一份,len与cap的值也拷贝了一份,重点来了
如果在函数内部改变的切片的长度或者容量,将不改变原先的值
如以下用法:
因为函数内部改变了len,这里的输出仍然是:
<pre><code class="lang-go hljs">[0,0] </code></code></pre>那该怎样通过函数即便改变了len与cap也能改变切片呢?
其实很简单,仿照append()方法,返回操作切片
到此这篇关于“【golang】slice底层函数传参原理易错点”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!
您可能感兴趣的文章:
【golang】slice底层函数传参原理易错点
【GoLang】golang底层数据类型实现原理
golang 没有名字参数_说说不知道的Golang中参数传递
Golang Slice
[go语言]-slice实现的使用和基本原理
11.深入理解切片(slice)
golang 函数传多个参数_Golang中的参数传递示例详解
golang 解析struct为map_Golang 的引用类型底层实现
应用编程基础课第三讲:Go编程基础
理解 Go 编程中的 slice