目录

文章目录

  • 目录
  • 切片
  • len() 和 cap() 函数
  • append() 和 copy() 函数
  • 空切片

切片

Golang 中,切片(Slice)的本质是长度不固定的、可以追加元素的特殊数组,所以切片也称为 “动态数组”。

注意,声明时切片不需要说明长度,否则会触发异常:cannot use numbers (type [9]int) as type []int in argument to print_slice

另外,Golang 切片可以通过设置下限及上限来截取切片,e.g.[lower-bound:upper-bound],和 Python 切片的使用是非常类似。

s := arr[startIndex:endIndex]
s := arr[startIndex:]
s := arr[:endIndex]

示例:

package mainimport "fmt"func print_slice(x []int){fmt.Printf("len=%d cap=%d slice=%v\n", len(x), cap(x), x)
}func main() {/* 创建切片变量。 */numbers := []int {0, 1, 2, 3, 4, 5, 6, 7, 8}// var numbers[] int = []int {0, 1, 2, 3, 4, 5, 6, 7, 8}/* 打印原始切片。 */print_slice(numbers)/* 打印子切片,从索引 1 到索引 4(不包含)*/print_slice(numbers[1:4])/* 打印子切片,默认下限为 0 */print_slice(numbers[0:3])/* 打印子切片,默认上限为 len(s) */print_slice(numbers[4:])
}

或使用 make() 函数来创建一个切片,make() 函数还可以指定切片的容量:

  • length:指定切片长度。
  • capacity:指定了最大切片长度,为可选参数。

示例:

var numbers[] int = make([]int, 9, 10)
numbers = []int {0, 1, 2, 3, 4, 5, 6, 7, 8}
// or
numbers := make([]int, 9, 10)
numbers = []int {0, 1, 2, 3, 4, 5, 6, 7, 8}

len() 和 cap() 函数

  • len():获取切片的长度。
  • cap():获取切片的最大长度。
package mainimport "fmt"func print_slice(x []int) {fmt.Printf("len=%d cap=%d slice=%v\n", len(x), cap(x), x)
}func main() {var numbers = make([]int, 3, 5)print_slice(numbers)
}

结果:

len=3 cap=5 slice=[0 0 0]

append() 和 copy() 函数

  • append():向切片追加新的元素,因为切片没有指定长度,所以理论上可以追加任意数量。
  • copy():将一个切片包含的元素拷贝到另一个切片。
package mainimport "fmt"func print_slice(x []int){fmt.Printf("len=%d cap=%d slice=%v\n", len(x), cap(x), x)
}func main() {var numbers []int/* 空切片 */print_slice(numbers)/* 向切片添加一个元素 */numbers = append(numbers, 1)print_slice(numbers)/* 向切片添加多个元素 */numbers = append(numbers, 2, 3, 4)print_slice(numbers)/* 创建切片 numbers1 是 numbers 切片的两倍容量 */numbers1 := make([]int, len(numbers), (cap(numbers) * 2))print_slice(numbers1)/* 拷贝 numbers 的内容到 numbers1 */copy(numbers1, numbers)print_slice(numbers1)
}

结果:

len=0 cap=0 slice=[]
len=1 cap=1 slice=[1]
len=4 cap=4 slice=[1 2 3 4]
len=4 cap=8 slice=[0 0 0 0]
len=4 cap=8 slice=[1 2 3 4]

空切片

如果一个切片仅完成了声明却未进行初始化,该切片就是空切片(nil),长度为 0。

示例:

package mainimport "fmt"func main() {var numbers []intprintSlice(numbers)if(numbers == nil){fmt.Printf("切片是空的")}
}func printSlice(x []int){fmt.Printf("len=%d cap=%d slice=%v\n", len(x), cap(x), x)
}

结果:

len=0 cap=0 slice=[]
切片是空的

Go 语言编程 — 高级数据类型 — Slice 切片相关推荐

  1. C 语言编程 — 高级数据类型 — void 类型

    目录 文章目录 目录 前文列表 void 类型 前文列表 <程序编译流程与 GCC 编译器> <C 语言编程 - 基本语法> <C 语言编程 - 基本数据类型> & ...

  2. C 语言编程 — 高级数据类型 — 字符串

    目录 文章目录 目录 前文列表 字符串 字符串拷贝 字符串比较 strcmp strncmp 前文列表 <程序编译流程与 GCC 编译器> <C 语言编程 - 基本语法> &l ...

  3. C 语言编程 — 高级数据类型 — 共用体

    目录 文章目录 目录 前文列表 共用体 定义共用体 访问共用体成员 前文列表 <程序编译流程与 GCC 编译器> <C 语言编程 - 基本语法> <C 语言编程 - 基本 ...

  4. C 语言编程 — 高级数据类型 — 结构体与位域

    目录 文章目录 目录 前文列表 结构体 定义结构体 初始化结构体变量 访问结构体成员 结构体的内存分布 将结构体作为实参传入函数 指向结构体变量的指针 位域 定义位域 使用位域结构体的成员 前文列表 ...

  5. C 语言编程 — 高级数据类型 — 枚举

    目录 文章目录 目录 前文列表 声明枚举类型 定义枚举类型的变量 枚举类型变量的枚举值 枚举在 switch 语句中的使用 将整型转换为枚举类型 前文列表 <程序编译流程与 GCC 编译器> ...

  6. C 语言编程 — 高级数据类型 — 数组

    目录 文章目录 目录 前文列表 数组 声明数组 初始化数据 访问数组元素 二维数组 指向数组的指针 将数组指针作为实参传入函数 从函数返回一个数组指针 指针数组 数组名和取数组首地址的区别 前文列表 ...

  7. C 语言编程 — 高级数据类型 — 指针

    目录 文章目录 目录 前文列表 指针 声明一个指针变量 使用指针 空指针 悬空指针 野指针 指针的算术运算 指向指针的指针 将指针作为实际参数传入函数 从函数返回指针 一个古老的笑话 前文列表 < ...

  8. Go 语言编程 — 高级数据类型 — 结构体

    目录 文章目录 目录 结构体 访问结构体成员 向函数传递结构体 结构体指针 结构体标签(Struct Tag) 结构体 Golang 中,结构体是由一系列具有相同类型或不同类型的数据构成的数据集合.与 ...

  9. Go 语言编程 — 高级数据类型 — Interface、多态、Duck Typing 与泛式编程

    目录 文章目录 目录 Golang 的接口 Interface 实例存储的是实现者的值 如何判断某个 Interface 实例的实际类型 Empty Interface Interface 与多态 I ...

最新文章

  1. Redis初学:5(String类型的基本操作)
  2. MaterialImageView
  3. LNMP-源码 nginx ,keepalived
  4. php5(isapi).mysql5.zendforiis.rar_WIN2003系统IIS下PHP5+MySQL5+ZendOptimizer配置图解教程第1/3页...
  5. Silverlight实用窍门系列:40.Silverlight中捕捉视频,截图保存到本地【附带实例源码】...
  6. python中itertools的用法_python中的itertools的使用详解
  7. interrupt()会中断线程的wait等待
  8. Redis高可用基石--主从同步
  9. 为什么说边缘计算的发展比5G更重要?
  10. linux2.6 gcc 4.8.2,在Red Hat Enterprise linux 6.5上安装GCC 4.8.2
  11. java基础—采用递归的方式来获取相关目录下的子目录的名称
  12. 从零实现深度学习框架——过拟合与欠拟合
  13. 简单的遗传算法java实例
  14. 多品种小批量产品怎么做精益生产?
  15. 10kV变电所运维平台的现代化智能构建方案
  16. win10关闭windows聚焦_Windows聚焦功能无法使用怎么办_win10锁屏聚焦功能不更新教程 - 系统家园...
  17. 简单用python求平均值标准差
  18. 决定局域网特性的三要素
  19. 最好的开源网络入侵检测工具
  20. win10天干五合工具

热门文章

  1. html增加删除线,HTML如何添加删除线?
  2. python 智能识别 商品_阿里云货架商品识别与管理Python SDK使用示例-阿里云开发者社区...
  3. jpa多表关联查询_JPA【关联查询篇】
  4. 研究人员使用脑机接口从神经信号中重建单词
  5. 思科交换机配置试题_(思科配置试题可以略过)
  6. 华人博士拿下ACM SIGSOFT杰出博士论文奖,师从北大谢涛教授
  7. 英特尔中国换帅,迎来史上首位女董事长,原总裁杨旭年底退休
  8. Windows上也能用Swift编程了,官方编译工具安装包现已上线
  9. 不能打游戏的汽车不是好电影院!特斯拉面向国内推送V10.0系统,能辅助变道还能看爱奇艺...
  10. AI给AI论文写了个摘要,网友戏称为“摘要通过图灵测试”,推特点赞上千