Go语言:切片(slice)

发布于:2022-12-18 ⋅ 阅读:(287) ⋅ 点赞:(0)

简介

切片是相同类型元素的可变长度的集合,通常表示为[]type。同一切片中的元素类型都是同一个type的,它看上去很像数组,但没有长度。切片的底层都有一个数组。


组成

每个切片都由三部分组成:

  • 指向底层数组中某个元素的指针:指向数组的第一个从切片访问的元素,这个元素并不一定是数组的第一个元素。一个底层数组可以对应多个切片,这些切片可以引用数组的任何位置,并且彼此之间的元素可以重叠。
  • 长度(length/len):切片中的元素个数。
  • 容量(capacity/cap):为切片分配的存储空间。

切片类型的初始化值是nil,没有对应的底层数组,并且长度和容量都是0。所以切片只能和nil比较。如果想检查切片是否为空,则可以使用len(s) == 0来判断。


创建切片

创建切片的方式有三种:基于数组创建,直接创建,使用内置函数make创建切片。

基于数组创建

举例:

package main

import "fmt"

func main() {
	var drinks = [5]string{"矿泉水", "绿茶", "冰红茶", "可乐", "芬达"}
	var drinkSlice []string = drinks[0:3]
	fmt.Println(drinkSlice)
}

说明:

①创建一个string类型的数组。

②基于数组创建一个切片。

Go语言支持以drinks[开始:结束]这样的方式基于数组生成一个切片。

比如上面程序的打印结果就是

[矿泉水 绿茶 冰红茶]

如果想提取数组的2-4个元素,则可以将其实索引指定为1,将终止索引指定为4。

Go语言的切片原则是“左含右不含”,比如上面的drinks[0:3],就包含了数组索引值为0到2的三个元素,并没有包含索引值为3的元素(可乐)。

注:如果想指定从哪个元素开始直接打印完后面的所有元素,则可以省略结束,比如[2:]


直接创建

package main

import "fmt"

func main() {
	var drinkSlice = []string{"矿泉水", "绿茶", "冰红茶", "可乐", "芬达"}
	fmt.Println(drinkSlice)
}

使用内置函数创建

make语法:

make([]type,len)

make([]type,len,cap)

	drinkSlice1 := make([]string,6)
	drinkSlice2 := make([]string,6,8)

drinkSlice1和 drinkSlice2的长度都是6,他们的容量分别是6和8。


网站公告

今日签到

点亮在社区的每一天
去签到