切片一般用于快速地操作一块数据集合(数据集合包括数组)。
切片(slice)是对数组一个连续片段的引用,所以切片是一个引用类型。
如果将数据集合比作蛋糕的话,切片就是你要的“那一块”。
切的过程包含从哪里开始(这个就是切片的地址)及切多大(这个就是切片的大小)。
容量可以理解为装切片的那个盘子的大小
声明切片类型:var 切片名[]数据类型
var a []string //声明一个字符串切片
var b = []int{} //声明一个整型切片
1、从数组(或切片)生成新的切片
切片默认指向一段连续内存区域,可以是数组,也可以是切片本身。
从连续内存区域生成切片是常见的操作,格式如下:
slice[开始位置:结束位置]
- slice表示目标切片对象。
- 开始位置对应目标切片对象的索引。
- 结束位置对应目标切片的结束索引。
1.1从数组生成新的切片
从数组生成切片,代码如下:
package main
import "fmt"
func main() {
var aa = [6]int{1, 2, 3, 4, 5, 6}
bb := aa[0:4] //切片,从数组aa[0]-aa[3]
fmt.Println(bb)
}
此时打印:
1.2 切片缺省参数规则
如果缺省第一个参数,则默认从开头位置开始
如果缺省第二个参数,则默认从第一个参数位置开始,一直到最后
如果两个参数都缺省,等于与目标数据集合等效
如果两个参数都为0,等于清空切片
例如:切片[0:0]
1.3 从切片生成新的切片
与数组生成基本一样
2、使用make函数构造切片
如果需要动态地创建一个切片,可以使用make()内建函数
,格式如下:
make([]T,size,cap)
- T:数据类型
- size:切片大小(元素个数)
- cap:预分配元素数量,提前分配空间,不影响size
例如:
aa和bb均是预分配2个元素的切片,只是aa的内部存储空间已经分配了10个,但实际使用了2个元素。
3、使用append为切片添加元素
4、为切片删除元素
Go 语言并没有对删除切片元素提供专用的语法或者接口,需要使用切片本身的特性来删除元素。
代码如下:
package main
import (
"fmt"
)
func main() {
aa := []string{"a", "b", "c", "d", "e", "f"}
index := 3 //要删除元素的位置,我们要删除d
fmt.Println(aa[:index]) //表达式,要删除元素之前的所有元素
fmt.Println(aa[index+1:])//表达式,要删除元素之后的所有元素
aa = append(aa[:index], aa[index+1:]...)//用append函数拼接前后,完成删除
fmt.Println(aa)
}
输出如下: