Golang 切片综合指南( 三 )
更改新切片不会对旧切片产生任何影响 , 因为新切片现在有一个不同的底层数组 , 它的指针指向一个新分配的数组 。
将一个切片追加到另一个切片中内置函数 append 还是一个 可变参数 函数 。 这意味着你可以传递多个值来追加到单个切片中 。 如果你使用 … 运算符 , 可以将一个切片的所有元素追加到另一个切片中 。
// 创建两个切片 , 使用两个整型元素初始化每个切片 。 slice1:= []int{1, 2}slice2 := []int{3, 4}// 合并两个切片并打印结果 。 fmt.Println(append(slice1, slice2...))// 输出:[1 2 3 4]
对切片执行索引a[low:high]
a := [...]int{0, 1, 2, 3} // 一个数组s := a[1:3]// s == []int{1, 2}// cap(s) == 3s = a[:2]// s == []int{0, 1}// cap(s) == 4s = a[2:]// s == []int{2, 3}// cap(s) == 2s = a[:]// s == []int{0, 1, 2, 3}// cap(s) == 4
遍历切片Go 有一个特殊的关键字 range, 你可以使用该关键字对切片进行遍历 。
// 创建一个整型切片 。 // 长度和容量均为 4 。 slice := []int{10, 20, 30, 40}// 遍历每个元素并打印值 。 for index, value := range slice {fmt.Printf("Index: %d Value: %d\n", index, value)}/*输出:Index: 0 Value: 10Index: 1 Value: 20Index: 2 Value: 30Index: 3 Value: 40*/
- 在遍历切片时 , 关键字 range 将返回两个值 。
- 第一个值是索引下标 , 第二个值是索引位中值的副本 。
- 一定要知道 range 是在复制值 , 而不是返回值的引用 。
/* 创建一个整型切片 。长度与容量均为 4 。 */slice := []int{10, 20, 30, 40}/* 遍历每个元素并打印 元素的值和地址 。 */for index, value := range slice {fmt.Printf("Value: %d Value-Addr: %X ElemAddr: %X\n",value,--tt-darkmode-bgcolor: #131313;">range关键字提供元素的拷贝 。
如果你不需要下标值 , 你可以使用下划线字符丢弃该值 。
// Create a slice of integers.// Contains a length and capacity of 4 elements.slice := []int{10, 20, 30, 40}// Iterate over each element and display each value.for _, value := range slice {fmt.Printf("Value: %d\n", value)}/*Output:Value: 10Value: 20Value: 30Value: 40*/
关键字 range 总是从开始处遍历一个切片 。 如果你需要对切片的迭代进行更多的控制 , 你可以使用传统的 for 循环 。
// 创建一个整型切片 。 // 长度和容量均为 4 。 slice := []int{10, 20, 30, 40}// 从元素 30 开始遍历每个元素 。 for index := 2; index < len(slice); index++ {fmt.Printf("Index: %d Value: %d\n", index, slice[index])}/* 输出:Index: 2 Value: 30Index: 3 Value: 40*/
总结在本文中 , 我们深入探讨了切片的概念 。 我们了解到 , 切片并不存储任何数据 , 而是描述了底层数组的一部分 。 我们还看到 , 切片可以在底层数组的范围内增长和收缩 , 并配合索引可作为数组使用;切片的零值是 nil;函数 len 、 cap 和 append 都将 nil 看作一个长度和容量都为 0 的 空切片 ;你可以通过 切片字面量 或调用 make 函数(将长度和容量作为参数)来创建切片 。 希望这些对你有所帮助!
原文地址:A Comprehensive Guide to Slices in Golang
原文作者:Radhakishan Surwase:@rksurwase 译文出自:掘金翻译计划 本文永久链接: 译者:JalanJiang: 校对者:Emin: , Samuel Jie:
- 华为watch|或是这个价位综合素质较高的国产机箱——钛3080机箱体验
- 中国网海峡频道|女性健康赛道唯一!美柚四登中国互联网综合实力100强
- 小米科技|为什么小米手机参数那么高,但综合体验就是差强人意呢?
- 液晶显示器|“LCD永不为奴”:盘点市面上综合体验不错的LCD屏幕机型
- 山石网科|山石网科加快布局数据安全,推出数据安全治理体系和综合平台
- 中国都市商界网|全球制造业之王的数字化外贸综合服务平台 如何做到名列前茅?
- MySQL|realme真我GTNeo评测:综合表现可圈可点,性价比很高!
- OPPO|年增长率竟有237%!综合产品体系+丰富专利库,OPPO硬实力拉满
- iqoo|低价高配,iQOO Z3千元价格畅快综合体验
- S华为联合小米等完成 5G SA 终端切片端到端对接技术试验