go 数组(array)、切片(slice)、map
数组(array)
go语言中的数组是固定长度的。使用前必须指定数组长度。
go语言中数组是值类型。如果将数组赋值给另一个数组或者方法中参数使用都是复制一份,方法中使用可以使用指针传递地址。
var arrayName = [arraySize]dataType{xxx,xxx,xxx....} //定义全局数组
var b = [10]int{1,2,3,4,5,6,7,8,9,0}
var b = [10]int{1,2,3,4} //不足自动补0
arr := [...]int{1,2,3,4,5}
//循环
for _,i := range arr {
fmt.Println(i)
}
多维数组
//初始化:
var a = [3][4]int{[4]int{1,2,3},[4]int{1,2,3},[4]int{1,2}} //不足补0
复制代码
//创建数组声明changdu
var aaa1 = [5]int{1,2,3,4}
fmt.Println(aaa1)
//创建数组不声明长度
var aaa2 = [...]int{1111,2222,3333,4444,55555,6666}
fmt.Println(aaa2)
//创建数组并初始化其中部分
var aaa3 = [5]string{1:"aaa",2:"bbb"}
fmt.Println(aaa3)
切片(slice)
指向底层数组的指针。不需要定义长度。和数组在写法上的区别就是不需要指定长度
对比:
v := [2]string{"123","123"} //数组
v := []string{"123","123"} //切片
如果多个slice指向同一个底层数组,其中一个改变了数组的值,则其他如果包括这个key的值也会改变
如果slice增加时,导致数组超长,则会再次分配一个新的数组。其他slice可能就会指向这个新的底层数组,这个前一个改变了底层数组的值可能是第一个底层数组,所以第二个slice的key 指向的是第二个底层数组。这点有点混淆。来自无闻视频教程中讲解。
方法:
append(arr,1,2,3,4,5) //将1,2,3,4,5追加到arr中
slice := arr[开始:结束] //指向数组中开始到结束的
copy(arr1,arr2) //用arr2中的值替代arr1中的值,通过key 对应的代替 copy(arr1[开始:结束],arr2[开始:结束]) 指定替换部位
map
是一个key=>value的hash结构,key是除func、slice、map、array外的类型
声明初始化 m := map[string]string{}
赋值一个 m["key1"] = "val1"
取值 v := m["key1"]
删除一个值 d := delete(m,"key1")
取值的时候可以返回两个值。另一个可以判断是否存在
val,isset := m[2]