之前,在一里面讲过关于数组以及切片的区别,都知道 数组的长度是固定的并且数组长度属于类型的一部分,所以数组有很多的局限性。
引言:
例如:
func sumArray(number [5]int) int{
sum := 0
for _, value := range number{
sum = sum + value
}
return sum
}
这个求和函数只能接受[5]int
类型
package main
import (
"fmt"
"strconv"
)
func main() {
arr := [5]int{1, 2, 3,4,5}
sum := sumArray(arr)
fmt.Println("sum = "+strconv.Itoa(sum))
}
func sumArray(count [5]int) int{
sum := 0
for _, value := range count{
sum = sum + value
}
return sum
}
数组a中已经有三个元素了,我们不能再继续往数组a中添加新元素了,我们在向里面添加元素,就会编译不通过,
切片的本质:
切片的本质就是对底层数组的封装,有三个信息:底层数组的指针、切片的长度(len)和切片的容量(cap)。
例如:
数组 a := [6]int{0, 1, 2, 3, 4, 5}
切片 s := a[:3] 画图表示.
扫描二维码关注公众号,回复:
12424531 查看本文章
![](/qrcode.jpg)
常用的方法:
切片判空
判断一个切片是否为空,不能使用 s == nil 而要使用 len(s) == 0
赋值拷贝
由于拷贝前后两个变量共享底层数组,所以对一个切片的修改会影响另一个切片的内容.
添加元素
通过打印结果可以看到,切片的底层数组肯定变化了,那么我们如何看到它变化的策略呢?
首先,我们看一下源码:
删除元素
切片没有直接删除元素这一具体方法,但是 我们可以曲线救国,使用append()来处理
未完待续....