切片和数组类似,都是数据集合。和数组不同的是,切片是一块动态分配大小的连续空间。它和 Java 语言中的AarryList集合类似。
1.声明切片
切片的声明格式如下:
var name []T
2.切片常用方法
| 方法 | 说明 |
|---|---|
| make( []T, size, cap ) | 构造切片 |
| append(slice,...elements) | 往切片动态添加元素 |
| copy( destSlice, srcSlice []T) int | 将一个切片中的数据复制到另一个切片中 |
实例:
package main
import (
"fmt"
"strconv"
)
func main() {
// 声明整型切片
var numList []int
// 声明字符串切片
var citysList []string
// 声明一个空切片, {} 表示已经分配内存,但是切片里面的元素是空的
var numListEmpty = []int{}
// 使用make() 函数构造切片
var stusList = make([]string, 4, 10)
// 输出4个切片
fmt.Println(numList, citysList, numListEmpty, stusList)
// 输出4个切片大小
fmt.Println(len(numList), len(citysList), len(numListEmpty), len(stusList))
fmt.Println("------------判定切片是否为空--------------")
// 切片判定是否为空结果
fmt.Println(numList == nil)
fmt.Println(citysList == nil)
fmt.Println(numListEmpty == nil)
fmt.Println(stusList == nil)
// 使用append追加新元素
numList = append(numList, 1, 2, 3, 4, 5)
citysList = append(citysList, "北京", "上海", "广州", "深圳")
stusList = append(stusList, "张三", "李四", "王五")
fmt.Println("------------切片中追加新元素后--------------")
fmt.Println(numList)
fmt.Println(citysList)
fmt.Println(stusList)
fmt.Println("---------------测试切片会自动扩容--------------")
for i := 0; i < 10; i++ {
//strconv.Itoa(int)方法是将int转成string
stusList = append(stusList, "张"+strconv.Itoa(i+1))
}
fmt.Println(stusList)
fmt.Println("---------------切片的拷贝--------------")
//目标切片
destStusSlice := make([]string, len(stusList))
copy(destStusSlice, stusList)
fmt.Println(destStusSlice)
fmt.Println("-------------从指定范围中生成切片--------------")
fmt.Println(stusList[7:]) //stusList[7:], 则表示从下标 7 置到数组的结束位置。
fmt.Println("-----------重置切片-------------")
stusList = stusList[0:0]
//fmt.Println(stusList[0:0]) //重置切片
fmt.Println(stusList)
//Go 语言中并没有提供特定的函数来删除切片中元素,但是我们可以使用append间接实现删除功能
fmt.Println("---------删除‘广州’----------")
citysList = append(citysList[:2], citysList[2+1:]...)
fmt.Println(citysList)
}
运行结果:
[] [] [] [ ]
0 0 0 4
------------判定切片是否为空--------------
true
true
false
false
------------切片中追加新元素后--------------
[1 2 3 4 5]
[北京 上海 广州 深圳]
[ 张三 李四 王五]
---------------测试切片会自动扩容--------------
[ 张三 李四 王五 张1 张2 张3 张4 张5 张6 张7 张8 张9 张10]
---------------切片的拷贝--------------
[ 张三 李四 王五 张1 张2 张3 张4 张5 张6 张7 张8 张9 张10]
-------------从指定范围中生成切片--------------
[张1 张2 张3 张4 张5 张6 张7 张8 张9 张10]
-----------重置切片-------------
[]
---------删除‘广州’----------
[北京 上海 深圳]