一、什么是切片

Go语言切片是对数组的抽象。

  • Go数组的长度不可改变,在特定场景中这样的集合就不太适用,Go中提供了一种灵活,功能强悍的内置类型切片("动态数组");
  • 与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。
  • 切片本身没有任何数据,它们只是对现有数组的引用。
  • 切片与数组相比,不需要设定长度,在[ ]中不用设定值,相对来说比较自由
  • 从概念上面来说slice像一个结构体,这个结构体包含了三个元素:

切片的结构:

  • 〇指针,指向数组中slice指定的开始位置
  • 〇长度,SPslice的长度
  • 〇最大长度,也就是slice开始位置到数组的最后位置的长度

二、切片的使用

切片的声明

GO基础之切片

 

    s1 := make([]int, 5)
    s2 := make([]int, 5, 7)

 

切片的初始化:

GO基础之切片

 

 

nums := []int{1, 2, 3, 4, 5}

len()和cap()函数

1、 切片的长度是切片中元素的数量。

2、 切片的容量是从创建切片的索引开始的底层数组中元素的数量。

3、 切片是可索引的,并且可以由len()方法获取长度,切片提供了计算容量的方 法cap(),可以测量切片最长可以达到多少。[数组计算cap()结果与len()相同]

4、 切片实际的是获取数组的某一部分,len切片<=cap切片<=len数组 

package main

import "fmt"

func main() {
    s1 := make([]int, 5)
    s2 := make([]int, 5, 7)
    printSlice(s1) //length:5,cap=5,slice=[0 0 0 0 0]
    printSlice(s2) //length:5,cap=7,slice=[0 0 0 0 0]
    //创建切片
    nums := []int{1, 2, 3, 4, 5}
    printSlice(nums)
    //从切片中截取小切片
    nums1 := nums[1:4]
    printSlice(nums1) //length:3,cap=4,slice=[2 3 4] 
    nums2 := nums[:3]
    printSlice(nums2) //length:3,cap=5,slice=[1 2 3]
    nums3 := nums[2:]
    printSlice(nums3) //length:3,cap=3,slice=[3 4 5]
}
func printSlice(slc []int) {
    fmt.Printf("length:%d,cap=%d,slice=%v \n", len(slc), cap(slc), slc)
}
View Code

相关文章: