hi,你好!欢迎访问本站!登录
本站由简数采集腾讯云宝塔系统阿里云强势驱动
当前位置:首页 - 文章 - 后端开发 - 正文 看Cosplay古风插画小姐姐,合集图集打包下载:炫龙网 · 炫龙图库

golang slice怎样拷贝_后端开发

2019-12-18后端开发ki4网13°c
A+ A-

golang 的slice是一个指向底层的数组的指针构造体。

这个构造体有三个属性,1.指向数组指针,2.len: slice中元素的数目 3.cap:slice占用内存数目。

只要深刻理解这三个属性才能在运用slice中不至于出错。 (引荐进修:go)

正确理解变量和同享

多个slice之间能够同享底层的数据,而且援用的数组部份区间大概堆叠

以上是golang 圣经中的一句话。深刻理解这句话关于日程编程异常有意义。

什么时刻同享数据会被其他变量修正

func f1()  {
    a1 := []int{1,2,3,4,5,6}
    a2 := a1
    a3 := a1[1:3]
    a1[1] = 999
    
    fmt.Println("a1=",a1,"a2=",a2,"a3=",a3)
}

运转效果

a1= [1 999 3 4 5 6] a2= [1 999 3 4 5 6] a3= [999 3]
Process finished with exit code 0

我们清晰的看到了数据同享,此时修正了a1 ,两位两个变量都被修正

什么时刻不会修正

func f2()  {
    a1 := []int{1,2,3,4,5,6}
    a2 := a1
    a3 := a1[1:3]
    a2 = append(a2,888)
    a1[1] = 999
    fmt.Println("a1=",a1,"a2=",a2,"a3=",a3)
}

运转效果

a1= [1 999 3 4 5 6] a2= [1 2 3 4 5 6 888] a3= [999 3]
Process finished with exit code 0

能够虽然a1被修正,a2并没有修正。我们晓得append函数会面对内存的从新分配。所以等a2举行append的时刻,会从新请求内存空间,将原有数组拷贝然后增添如新值。也就是当append操纵的时刻,此时a2 不在和a1 同享内存了。

在对slice复制的时刻,假如面对多个变量同时指向一个数组的时刻,一定要考虑到数据的同享和内存的从新分配。

以上就是golang slice怎样拷贝的细致内容,更多请关注ki4网别的相干文章!

  选择打赏方式
微信赞助

打赏

QQ钱包

打赏

支付宝赞助

打赏

  选择分享方式
  移步手机端
golang slice怎样拷贝_后端开发

1、打开你手机的二维码扫描APP
2、扫描左则的二维码
3、点击扫描获得的网址
4、可以在手机端阅读此文章
标签:

发表评论

选填

必填

必填

选填

请拖动滑块解锁
>>