Golang-切片、数组

发布时间 2023-03-29 14:45:29作者: 小刘的早餐店

1.数组的初始化、赋值

数组是有长度的,不能越界,和PHP的数组不一样

var myArray [5]int
myArray := [5]int{1, 2, 3, 4, 5}
fmt.Printf("%v", myArray) //[1,2,3,4,5]

2.slice的初始化、赋值

切片也就是没有给出长度的数组,可任意添加,会动态扩容

  • var声明一个切片
var mySlice []int
mySlice = append(mySlice,1)
mySlice = append(mySlice,2)
mySlice = append(mySlice,3)
mySlice = append(mySlice,4)
mySlice = append(mySlice,5)
fmt.Printf("%v", mySlice) //[1,2,3,4,5]
  • make([]Type,len,cap)初始化一个切片
mySlice := make([]int, 2, 10)
mySlice = append(mySlice, 1)
fmt.Printf("%+v", mySlice) //[0,0,1]

上述代码使用make初始化一个长度为2,容量为10的切片,int默认为0,字符串默认是空字符串,第三个参数容量不是必须的
实际应用中,如果你对接下来使用的容量有一个预计,则可以提前开辟好内存空间,避免slice后期自动扩容,毕竟扩容也有性能开销。

  • new 返回的是一个指针
mySlice := new([]int)
*mySlice = append(*mySlice, 1)
*mySlice = append(*mySlice, 2)
*mySlice = append(*mySlice, 3)
*mySlice = append(*mySlice, 4)
*mySlice = append(*mySlice, 5)
fmt.Printf("%+v", *mySlice) //[1,2,3,4,5]

当一个变量被声明了但是没有初始化值的话,其默认值则是该类型的零值,比如string默认零值是空字符串,int默认是0,对于slice来说其零值是nil。所以严格来说,var s []string申明的是一个nil slice,而make初始化的是一个空slice,如果直接返回的话nil会别前端处理为null,空slice为[],所以建议还是使用make初始化slice。