ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
Go 语言切片是对数组的抽象。 Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。 定义方式: ~~~ 1) make ( []Type ,length, capacity ) 2) make ( []Type, length) 3) []Type{} 4) []Type{value1 , value2 , ... , valueN } ~~~ 从3)和4)可见,创建切片跟创建数组唯一的区别在于 Type 前的"[]"中是否有数字或....,没有表示切片,否则表示数组。 ## 一、示例 ~~~ package main import ( "fmt" ) func main() { slice1 := make([]int32, 5, 8) slice2 := make([]int32, 9) slice3 := []int32{} slice4 := []int32{1, 2, 3, 4, 5} fmt.Println(slice1) fmt.Println(slice2) fmt.Println(slice3) fmt.Println(slice4) } ~~~ 结果: ~~~ [0 0 0 0 0] [0 0 0 0 0 0 0 0 0] [] [1 2 3 4 5] ~~~ ## 二、append()追加元素 ~~~ package main import ( "fmt" ) func main() { slice := []int32{} slice = append(slice, 1, 2, 3) fmt.Println(slice, "长度:", len(slice), "容量:", cap(slice)) } ~~~ 结果: ~~~ [1 2 3] 长度: 3 容量: 4 ~~~ ## 三、切片(索引从0开始,包左不包右) ~~~ numbers := []int{0, 1, 2, 3, 4, 5, 6, 7, 8} fmt.Println(numbers[1:4]) // >=1 && <4 fmt.Println(numbers[:3]) // <3 fmt.Println(numbers[4:]) // >=4 ~~~ 结果: ~~~ numbers[1:4] == [1 2 3] numbers[:3] == [0 1 2] numbers[4:] == [4 5 6 7 8] ~~~ ## 四、copy()复制 ~~~ numbers := []int{0, 1, 2, 3, 4, 5, 6, 7, 8} numbers2 := []int{} copy(numbers2, numbers) // 把numbers复制到numbers2 fmt.Println(numbers2) ~~~ 结果: ~~~ numbers2 == [0 1 2 3 4 5 6 7 8] ~~~