1 数组
2 切片
3 maps
package main
import "fmt"
// 回顾
func main() {
//1 连续存储,相同类型
//var a [3]int=[3]int{1,2,3}
//var a [3]int=[3]int{1,2}
//var a [3]int=[3]int{2:999}
//var a =[3]int{2:999}
//var a =[...]int{2:999}
//a :=[3]int{2:999}
//fmt.Println(a[0])
//循环(两种方式:索引,迭代)
// 多维数组
// 长度
//fmt.Println(len(a))
// 数组是值类型:当参数传递,在函数中修改,不会影响原来的(copy),值类型如果不初始化,有默认值
//2 切片:由于数组用起来不是特别方便,长度固定
// 本身不存储数据{指针,长度,容量},是对底层数组的引用 a[3]
// 定义并初始化
//var a []int=[]int{1,3,4}
//var s=[10]int{1,2,3,4,}
//var a []int=s[5:8]
//var a []int =make([]int,3,4)
// 长度和容量:长度是目前切片中存储值的数量(len),容量是可以使用的底层数组的大小(cap)
// 切片的取值赋值 按索引,不能越界(长度)
// 追加切片(
//如果不超过底层数组长度,就是改变底层数组,长度变化,容量不变
//如果超过底层数组长度,新创建一个数组,让切片指向新的数组,长度变化,容量变化(原来切片容量的两倍)
//a=append(a,1,2,3,)
// 切片的函数传递(引用类型),引用类型的空值是nil,值类型的空值是类型的0值,当参数传递,修改会影响原来的
// // 在函数中append坑
// copy函数使用
// 多维切片(第二维,也需要初始化)
//maps:字典,hash
var a