侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

Go语言切片中旧slice中要防止的问题

Go  /  管理员 发布于 1年前   371

当你从一个已存在的 slice 创建新 slice 时,二者的数据指向相同的底层数组。

如果你的程序使用这个特性,那需要注意 “旧”(stale) slice 问题。

某些情况下,向一个 slice 中追加元素而它指向的底层数组容量不足时

将会重新分配一个新数组来存储数据。

而其他 slice 还指向原来的旧底层数组。


// 超过容量将重新分配数组来拷贝值、重新存储

func main() {

    s1 := []int{1, 2, 3}
   
    fmt.Println(len(s1), cap(s1), s1)    // 3 3 [1 2 3 ]
   
    s2 := s1[1:]
   
    fmt.Println(len(s2), cap(s2), s2)    // 2 2 [2 3]
   
    for i := range s2 {
   
        s2[i] += 20
       
    }
   
    // 此时的 s1 与 s2 是指向同一个底层数组的
    fmt.Println(s1)        // [1 22 23]
   
    fmt.Println(s2)        // [22 23]
   
    s2 = append(s2, 4)    // 向容量为 2 的 s2 中再追加元素,此时将分配新数组来存
   
    for i := range s2 {
   
        s2[i] += 10
       
    }
    fmt.Println(s1)        // [1 22 23]    // 此时的 s1 不再更新,为旧数据
   
    fmt.Println(s2)        // [32 33 14]
   
}


更多go语言的注意点,请收藏本站网址:https://www.zongscan.com/



  • 上一条:
    Go语言中怎么跳出for switch和for select代码块
    下一条:
    Go语言中在range迭代slice、array、map时通过更新引用来更新元素浅析
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • go语言中查找最长不含有重复字符的字符串算法示例代码(0个评论)
    • go语言中日期时间戳比较功能示例代码(0个评论)
    • go语言中在两个/多个切片、数组中获取并集的示例代码(0个评论)
    • go语言中在两个切片、数组中查找共性(交集)的示例代码(0个评论)
    • go语言中bytes.Map()函数示例代码(0个评论)
    • 近期文章
    • 在laravel框架中使用中间件 + 队列的方式记录请求日志(0个评论)
    • laravel框架常用速查表收集(0个评论)
    • go语言中查找最长不含有重复字符的字符串算法示例代码(0个评论)
    • laravel中where IN多列特殊查询类型代码示例(0个评论)
    • 使用Laravel Airdrop加速您的CI构建(0个评论)
    • go语言中日期时间戳比较功能示例代码(0个评论)
    • 来自一位国外前端程序员学习go语言的功能第三部分(0个评论)
    • Laravel9 Eloquent WHERE Like搜索查询示例代码(0个评论)
    • 在PHP中使用MQTT协议的流程步骤(0个评论)
    • PHP远程代码执行漏洞:mysqlnd拓展中存在堆缓冲区溢出漏洞修复方式建议(0个评论)
    • 近期评论
    • 博主 在

      centos7中Meili Search搜索引擎安装流程步骤中评论 @鹿   执行以下命令看看你的2.27版本是否存在strin..
    • 鹿 在

      centos7中Meili Search搜索引擎安装流程步骤中评论 这是我的错误提示,下载了对应的glibc-2.25.tar.gz后续按照教程操作..
    • 阿凡达123 在

      golang 怎么做热更新中评论 也可以看看这个:https://github.com/edwingeng/hot..
    • 博主 在

      hyperf框架常用命令-在centos7中退出命令及在docker容器中退出命令中评论 @路过的靓仔:cdn静态资源被墙,已修复..
    • GGGGGGGGG 在

      layui框架常用输入框介绍中评论 写的很好解决问题..
    • 2016-10
    • 2017-09
    • 2020-03
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-12
    • 2021-01
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-10
    • 2021-11
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-03
    • 2022-04
    • 2022-05
    • 2022-06
    • 2022-07
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客