💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
### 切片 > **slice [开始位置:结束位置]** > len() 获取当前切片长度(实际存在元素个数),cap()函数获取当前切片容量(起始元素开始到底层数组中最后一个元素的个数),& 获取地址(内存地址) ``` package main import "fmt" func main() { var student = [...]string{"Tom", "Ben", "Peter"} var student1 = student[1:2] var student2 = student[:] fmt.Println("student数组", student) // student数组 [Tom Ben Peter] fmt.Println("student1切片", student1) //student1切片 [Ben] fmt.Println("student2切片", student2) // student1切片 [Tom Ben Peter] fmt.Println("student[1]的地址", &student[1]) // student[1]的地址 0xc000076490 fmt.Println("student1[0]的地址", &student1[0]) // student1[0]的地址 0xc000076490 fmt.Println("student1切片长度", len(student1)) // student1切片长度 1 fmt.Println("student1切片容量", cap(student1)) // student1切片容量 2 } ``` ### 声明切片 > **var 切片变量名 []元素类型** ``` package main import "fmt" func main() { var student []int fmt.Println("student切片", student) fmt.Println("student切片长度", len(student)) fmt.Println("student切片容量", cap(student)) fmt.Println("判断student切片是否为空", student == nil) } 结果: student切片 [] student切片长度 0 student切片容量 0 判断student切片是否为空 true ``` ### 初始化切片 > **make([]元素类型, 切片长度, 切片容量)** > **make([]元素类型, 长度容量一样)** > 容量必须大于长度 > 或者使用赋值的方法初始化 ``` package main import "fmt" func main() { var student []int student = make([]int, 2, 10) fmt.Println("student切片", student) fmt.Println("student切片长度", len(student)) fmt.Println("student切片容量", cap(student)) fmt.Println("判断student切片是否为空", student == nil) } 结果: student切片 [0 0] student切片长度 2 student切片容量 10 判断student切片是否为空 false ``` ``` package main import "fmt" func main() { var student = []int{1, 2} fmt.Println("student切片", student) fmt.Println("student切片长度", len(student)) fmt.Println("student切片容量", cap(student)) fmt.Println("判断student切片是否为空", student == nil) } 结果: student切片 [1 2] student切片长度 2 student切片容量 2 判断student切片是否为空 false ``` ### 为切片添加元素 > **使用append()函数添加元素,当切片长度等于容量值时(不能容纳其他元素),再次使用appedn()添加元素,容量会按照2倍数扩充** ``` package main import "fmt" func main() { student := make([]int, 0, 1) fmt.Println("添加前student切片", student) for i := 0; i < 5; i++ { student = append(student, i) fmt.Println("当前切片长度", len(student), "当前切片容量", cap(student)) } fmt.Println("添加后student切片", student) var str = [...]string{"Tom", "Ben", "Peter"} str1 := str[0:1] fmt.Println("str数组", str) fmt.Println("str1切片", str1) str1 = append(str1, "Pony") //添加的元素会覆盖原数组位置元素 fmt.Println("添加Pony后str1切片,长度,容量", str1, len(str1), cap(str1)) fmt.Println("添加Pony后的str数组", str) } 结果: 添加前student切片 [] 当前切片长度 1 当前切片容量 1 当前切片长度 2 当前切片容量 2 当前切片长度 3 当前切片容量 4 当前切片长度 4 当前切片容量 4 当前切片长度 5 当前切片容量 8 添加后student切片 [0 1 2 3 4] str数组 [Tom Ben Peter] str1切片 [Tom] 添加Pony后str1切片,长度,容量 [Tom Pony] 2 3 添加Pony后的str数组 [Tom Pony Peter] ``` ### 从切片中删除元素 > **Go语言没有删除切片元素的方法,需要手动将删除点前后元素连接起来** ``` package main import "fmt" func main() { var student = []string{"Tom", "Ben", "Peter", "John"} fmt.Println("删除Ben前,长度,容量", student, len(student), cap(student)) student = append(student[0:1], student[2:]...) //等价于 student = append(student[0:1], student[2], student[3]) fmt.Println("删除Ben后,长度,容量", student, len(student), cap(student)) student = student[0:0] fmt.Println("清空后,长度,容量", student, len(student), cap(student)) } 结果: 删除Ben前,长度,容量 [Tom Ben Peter John] 4 4 删除Ben后,长度,容量 [Tom Peter John] 3 4 清空后,长度,容量 [] 0 4 ``` ### 遍历切片 > **遍历切片的方法 类似于遍历数组。k是索引,v是切片副本元素** ``` for k,v := range 容器变量{ fmt.Println("索引",k,"元素",v) } ``` ``` package main import "fmt" func main() { var student = []string{"Tom", "Ben", "Peter", "John"} for k, v := range student { fmt.Println("索引", k, "元素", v) } } 结果: 索引 0 元素 Tom 索引 1 元素 Ben 索引 2 元素 Peter 索引 3 元素 John ```