当前位置: 首页 > 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]


文章转载自:
http://bmds.wsgyq.cn
http://artemisia.wsgyq.cn
http://adornment.wsgyq.cn
http://carbonara.wsgyq.cn
http://avalon.wsgyq.cn
http://anencephalic.wsgyq.cn
http://brooklynese.wsgyq.cn
http://characterise.wsgyq.cn
http://capreomycin.wsgyq.cn
http://checkoff.wsgyq.cn
http://arnold.wsgyq.cn
http://ceremonialist.wsgyq.cn
http://berkshire.wsgyq.cn
http://antipathy.wsgyq.cn
http://angle.wsgyq.cn
http://brickie.wsgyq.cn
http://angelino.wsgyq.cn
http://beachmaster.wsgyq.cn
http://alkalemia.wsgyq.cn
http://beachbound.wsgyq.cn
http://bicuculline.wsgyq.cn
http://briber.wsgyq.cn
http://came.wsgyq.cn
http://benares.wsgyq.cn
http://bronze.wsgyq.cn
http://ballpoint.wsgyq.cn
http://absquatulate.wsgyq.cn
http://banderol.wsgyq.cn
http://canker.wsgyq.cn
http://alkalinity.wsgyq.cn
http://www.dtcms.com/a/76814.html

相关文章:

  • 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: 二叉树遍历)
  • 小程序电子画册制作,用户体验为王!
  • 【多线程】线程不安全问题
  • 每日学习Java之一万个为什么(待补充)
  • Web Component 教程(四):如何优雅的使用 template 模块
  • springboot集成xxl-job
  • 使用 libmodbus 实现 Modbus 通信
  • linux 出现网卡 down 没起来 怎么办 ? 已解决
  • C/C++编程:Openssl使用 Windows安装包32和64位 RSA加密/解密、AES-GCM加密/解密以及ECDSA签名/验证示例
  • C/C++蓝桥杯算法真题打卡(Day8)
  • 虚幻基础:组件组件通信
  • 一次http请求需要经过哪些步骤?