跳转至

13 golang 基础语法之切片

切片(Slice)

go 切片是对数组的抽象, go 数组长度是不能改变的, 在特定场景中的, 这种集合就不太合适, go 提供了一种林火, 功能强悍的内置类型切片技术(动态数组), 和数组相比, 切片的长度是不固定的, 可以追加元素, 在追加时可能使切片容量增大

定义切片

1、 可以声明一个未指定大小的数组来声明切片

var identifier []type

切片不需要说明长度

可以使用make 来创建切片

var slice1 []type = make([]type, len)
简写
slice1 := make([]type, len)

也可以指定容量, 其中capacity 为可选参数

make([]T, length, capacity)

len 是数组的长度, 也是切片的初始长度

初始化切片

直接初始化切片, [] 表示切片类型, {1,2,3} 初始化的值依次是 1,2,3 其中 cap=len=3

s := [] int {1, 2, 3}

初始化切片s, 是数组arr 的引用

s = arr[:]

将arr 从下标startindex 到 endindex -1 的元素, 创建成一个新的切片

s := arr[startindex: endindex]

从下表为startindex一直到最后一个元素

s := arr[startindex:]

通过切片s 初始化切片s1

s1 := s[startindex:endindex]

通过内置的make() 初始化切片s, []int 表示元素类型为 int 的切片

s := make([]int, len, cap)

Len()和 cap()

切片是可索引的, 并且可以由len()方法获取长度

切片提供了计算容量的cap() 方法,可以测量切片最长可以达到多少

例子

package main

import "fmt"

func main() {
   var numbers []int

   printSlice(numbers)

   if(numbers == nil){
      fmt.Printf("切片是空的")
   }
}

func printSlice(x []int){
   fmt.Printf("len=%d cap=%d slice=%v\n",len(x),cap(x),x)
}