精品成品中韩网站源码免费,网站服务公司人工成本进什么费用,品牌网站建设有哪些功能,东莞发布解封通告编程笔记 Golang基础 023 切片 一、切片二、定义与初始化三、基本操作四、示例 Go语言中的切片#xff08;slices#xff09;是基于数组的抽象数据类型#xff0c;它提供了一种灵活的方式来处理可变长度的数据序列。切片本身不存储任何数据#xff0c;而是指向底层数组的一… 编程笔记 Golang基础 023 切片 一、切片二、定义与初始化三、基本操作四、示例 Go语言中的切片slices是基于数组的抽象数据类型它提供了一种灵活的方式来处理可变长度的数据序列。切片本身不存储任何数据而是指向底层数组的一个连续区域并记录了该区域的长度和容量。 一、切片
Go语言中的切片slices是基于数组的抽象数据类型它提供了一种灵活的方式来处理可变长度的数据序列。切片本身不存储任何数据而是指向底层数组的一个连续区域并记录了该区域的长度和容量。 切片slices在Go语言中主要用于管理动态大小的、连续内存区域中的元素序列。它们是数组概念的一种抽象提供了对底层数组的一个可变视图允许程序员更加灵活地操作数据集合。切片的主要用途包括 动态扩展与固定长度的数组不同切片的长度可以增长或缩短这意味着开发者可以在程序运行时根据需要添加或删除元素。 高效访问和修改虽然切片是引用类型但其内部仍然是基于连续内存的数组因此它继承了数组快速随机访问的优点对于大量数据的操作非常高效。 内存管理简化切片自动处理内存分配和可能的扩容需求通过 append 函数可以很容易地在末尾追加元素如果容量不足Go会自动创建一个新的更大的数组并将原数组的数据复制过去。 子集操作可以通过索引范围来创建一个原始切片的新视图即子切片而不需要复制任何数据。这样可以方便地处理大型数据结构的一部分。 函数参数和返回值由于切片具有轻量级的特点仅存储指向数组的指针、长度和容量将其作为函数参数传递比传递整个数组更高效同时它可以作为多变数量参数或动态生成结果的理想选择。
综上所述Go语言中的切片适用于大多数需要动态、灵活处理一系列相同类型数据的情况例如实现堆栈、队列、列表等数据结构或者在文本处理、网络编程等领域中处理不定长度的数据流。
二、定义与初始化
// 通过 make 函数创建一个长度为3、容量也为3的整数切片
slice : make([]int, 3)
// 或者直接初始化
slice2 : []int{1, 2, 3}// 创建并初始化的同时指定容量长度必须小于等于容量
slice3 : make([]int, 2, 5) // 长度为2容量为5三、基本操作
访问元素与修改元素
slice : []int{10, 20, 30}
fmt.Println(slice[0]) // 输出: 10
slice[1] 30 // 修改第二个元素为30遍历切片
for index, value : range slice {fmt.Printf(Index: %d, Value: %d\n, index, value)
}切片截取子切片
// 创建一个新的切片引用原切片的部分元素
subSlice : slice[1:3]
fmt.Println(subSlice) // 输出: [20 30]扩展切片
// 使用 append 函数添加元素到切片如果超出容量会自动扩容
slice append(slice, 40)
fmt.Println(slice) // 输出: [10 30 30 40]四、示例
package mainimport (fmt
)func main() {// 初始化一个切片slice : []int{1, 2, 3, 4, 5}// 打印原始切片fmt.Println(Original Slice:, slice)// 截取子切片subSlice : slice[1:3]fmt.Println(Sub-slice:, subSlice)// 在原始切片上追加元素slice append(slice, 6, 7, 8)fmt.Println(Appended Slice:, slice)// 遍历切片for i, v : range slice {fmt.Printf(Index: %d, Value: %d\n, i, v)}// 容量和长度查询lenOfSlice : len(slice)capOfSlice : cap(slice)fmt.Printf(Length of slice: %d, Capacity of slice: %d\n, lenOfSlice, capOfSlice)// 创建新的切片但共享相同的底层数组空间newSlice : slice[:lenOfSlice/2]fmt.Println(New Slice (shares memory):, newSlice)// 修改新切片影响原始切片newSlice[0] 99fmt.Println(After modification to newSlice:)fmt.Println(Original Slice:, slice)fmt.Println(New Slice:, newSlice)
}在这个综合示例中我们展示了如何初始化切片、截取子切片、扩展切片、遍历切片以及查看切片的长度和容量。同时还展示了切片之间的内存关系对一个切片的修改可能会影响到共享相同底层数组的其他切片。