当前位置: 首页 > news >正文

go语言中切片的长度和容量详解

 Go 语言中,切片(Slice) 是一种动态数组,它的核心特性由 长度(Length) 和 容量(Capacity) 共同定义。这两个概念是操作切片时的关键,理解它们的含义和区别能帮助你高效管理内存并避免常见错误。


一、长度(Length)

  • 定义:切片的长度表示当前包含的实际元素个数,即可以通过索引访问的元素数量。

  • 获取方式:使用 len(slice) 函数获取。

  • 用途

    • 确定切片当前的有效数据范围。

    • 遍历切片时,循环的上界通常是长度(for i := 0; i < len(s); i++)。

  • 示例

    s := []int{1, 2, 3}
    fmt.Println(len(s)) // 输出 3

二、 容量(Capacity)

  • 定义:切片的容量表示底层数组从切片的起始位置到数组末尾的最大可扩展元素个数

  • 获取方式:使用 cap(slice) 函数获取。

  • 用途

    • 判断切片在不分配新内存的情况下,最多能追加多少元素。

    • 优化性能时,预分配容量避免频繁扩容。

  • 示例

    s := make([]int, 3, 5) // 长度3,容量5
    fmt.Println(cap(s))    // 输出 5

三、长度与容量的关系

1. 初始状态

s := make([]int, 3, 5)
  • 内存示意图:

    +---+---+---+---+---+
    | 0 | 0 | 0 |   |   |  // 前3个元素已初始化,后2个为预留空间
    +---+---+---+---+---+
      ↑           ↑
    起始位置     容量边界
  • 长度:3(可访问 s[0]s[1]s[2]

相关文章:

  • opencv测量线距算法以及深入理解轮廓、采样点与 `pointPolygonTest` 及其在测量线距中的应用
  • Qt 中 isHidden 和 isVisible 的区别与使用
  • Spring 导入 XML 配置文件:@ImportResource
  • 力扣Hot100——560. 和为 K 的子数组
  • iwebsec-SQL数字型注入
  • 基于WebRTC的嵌入式音视频通话SDK:EasyRTC跨平台兼容性技术架构实时通信的底层实现
  • kotlin中的数据转换
  • Qt 通过MSVC编译运行项目
  • numpy学习笔记1:zeros = np.zeros((3, 3)) 详解
  • 脚本一键式启动Nginx、Mysql、Redis
  • C语言每日一练——day_11
  • 性能测试之grafana展示jmeter测试指标与主机监控
  • DApp用户激励机制设计:从代币经济到行为心理学的深度解构
  • Oracle常见系统函数
  • C# 中泛型(Generics)‌的核心概念
  • C# 事件(Event)核心概念
  • JVM的垃圾回收器都有哪些?
  • 尚硅谷爬虫(解析_xpath的基本使用)笔记
  • 《算法笔记》9.2小节——数据结构专题(2)->二叉树的遍历 问题 A: 复原二叉树(同问题 C: 二叉树遍历)
  • 小程序电子画册制作,用户体验为王!
  • 八成盈利,2024年沪市主板公司实现净利润4.35万亿元
  • 国台办:台商台企有信心与国家一起打赢这场关税战
  • 大型长读长RNA测序数据集发布,有助制定精准诊疗策略
  • 李铁案二审今日宣判
  • 贵州茅台一季度净利268亿元增长11.56%,系列酒营收增近两成
  • 习近平访问金砖国家新开发银行