golang中数组的长度是不可以变得,但是某些场合就不使用了,GO提供了一种灵活,功能强悍的类型—切片,切片中有两种概念:一种是len长度,二是cap容量,长度是已经被赋值的最大下标+1,可以通过len函数获得切片的长度。容量是指切片最大可容纳多少个元素,可以通过cap函数获得,切片是引用类型,因此在当传递切片的时候将引用统一指针,修改其值,将也会影响其他的对象,
初始化
切片可以通过数组来初始化,也可以通过make函数初始化。初始化时len=cap,在最佳元素时如果容量cap不足将按照len的二倍扩容,引用的地址也将改变。
这个是容量足够使用的引用传递
package main
import "fmt"
func main() {
s := []int{1,2,3,4,5}
ss := s[0:2]
ss = append(ss, 4)
for _,v := range ss{
v = v + 10
}
for i := range ss{
ss[i] = ss[i] + 10
}
fmt.Println(s)
}
这个是容量不足,将从新开辟内存,不在引用原来的切片
package main
import "fmt"
func main() {
s := []int{1,2,3,4,5}
ss := s[0:]
ss = append(ss, 4)
for _,v := range ss{
v = v + 10
}
for i := range ss{
ss[i] = ss[i] + 10
}
fmt.Println(s)
}