博客
关于我
go语言 slice
阅读量:797 次
发布时间:2023-04-03

本文共 884 字,大约阅读时间需要 2 分钟。

Golang 切片(Slice)基础

切片的基本特性

数组的长度是固定的,而切片的长度则是不固定的。切片可以通过切片操作从数组中获取子数组,具备动态的长度特性。

切片的定义

切片的定义方式与数组类似,但不需要预先指定长度:

a := [5]int{ // 数组定义,必须有长度    1, 2, 3, 4, 5,}s := []int{ // 切片定义,没有长度    1, 2, 3, 4, 5,}

切片的扩容机制

使用 append 函数添加数据时,如果切片的容量已满,会自动扩容。扩容策略如下:

  • 如果当前容量小于 1024,扩容后变为上一次容量的两倍。
  • 如果当前容量大于等于 1024,扩容后变为上一次容量的四分之一加一。

切片容量的扩容总是以偶数为单位进行,确保内存对齐。

切片的基本操作

获取单个元素

s[0] // 获取索引 0 处的元素

获取整个切片

s[:] // 获取整个切片

获取子切片

  • 从索引 low 到末尾:
    s[low:] // 例如:s[2:] 获取索引 2 及之后的元素
  • 从索引 0high
    s[:high] // 例如:s[:3] 获取前 3 个元素
  • 从索引 lowhigh
    s[low:high] // 例如:s[1:4] 获取索引 1 到 3 的元素
  • 最大容量限制(可选最大容量):
    s[low:high:max] // 例如:s[1:4:10] 获取索引 1 到 3 的元素,切片容量为 10

切片的长度和容量

  • len(s):切片的当前长度,总是小于等于 cap(s)
  • cap(s):切片的当前容量,总是大于等于 len(s)

切片的深拷贝

使用 copy 函数进行深拷贝操作:

copy(s, newSlice) // 将 newSlice 的内容深拷贝到 s 中

切片的引用传递特性

在 Golang 中,数组是值传递,而切片是引用传递。因此,修改切片会直接反映到原数组中。

总结

切片是 Golang 中非常灵活的数据结构,支持动态长度和扩容机制。通过合理使用切片操作和扩容策略,可以充分发挥其性能优势。

转载地址:http://xwrfk.baihongyu.com/

你可能感兴趣的文章
oracle 10g的安装配置
查看>>
Oracle 11.2.0.4 x64 RAC修改public/private/vip/scan地址
查看>>
Oracle 11G INDEX FULL SCAN 和 INDEX FAST FULL SCAN 对比分析
查看>>
Oracle 11g 使用RMAN备份数据库
查看>>
Oracle 11g 单实例安装文档
查看>>
Oracle 11gR2学习之二(创建数据库及OEM管理篇)
查看>>
Oracle 11g中的snapshot standby特性
查看>>
Oracle 11g忘记sys、system、scott密码该这样修改!
查看>>
Oracle 11g数据库安装和卸载教程
查看>>
Oracle 11g超详细安装步骤
查看>>
Oracle 12c中的MGMTDB
查看>>
Oracle BEQ方式连接配置
查看>>
ORACLE Bug 4431215 引发的血案—原因分析篇
查看>>
oracle dblink 创建使用 垮库转移数据
查看>>
oracle dblink结合同义词的用法 PLS-00352:无法访问另一数据库
查看>>
Oracle dbms_job.submit参数错误导致问题(ora-12011 无法执行1作业)
查看>>
oracle dg switchover,DG Switchover fails
查看>>
Oracle EBS-SQL (BOM-15):检查多层BOM(含common BOM).sql
查看>>
Oracle EBS环境下查找数据源(OAF篇)
查看>>
oracle Extract 函数
查看>>