Golang-切片、数组、Map

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,2,3,4,5)
fmt.Printf("%v", mySlice) //[1,2,3,4,5]
  • 短变量声明
mySlice :=[]int{}
mySlice = append(mySlice,1,2,3,4,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,2,3,4,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。

map

myMap := make(map[string]string, 0)
myMap := make(map[string]string, 10)

上述两个初始化结果是一样的,len设置对map不起作用

var myMap map[string]string
myMap["aaa"] = "bbb" //错误的

如果不初始化 map,那么就会创建一个 nil map。nil map 不能用来存放键值对,建议使用make进行初始化

for遍历

for  a:= range b {
	fmt.Println(a)  
}

如果b是map则a是key,如果b是slice 则a是index, for遍历只有一个接收值时,默认是‘下标’

posted @ 2023-03-29 14:38  小刘的早餐店  阅读(41)  评论(0编辑  收藏  举报