一 数组(array)

  go语言中的数组是固定长度的。使用前必须指定数组长度。

  go语言中数组是值类型。如果将数组赋值给另一个数组或者方法中参数使用都是复制一份,方法中使用可以使用指针传递地址。

  声明:

多维数组:

 

切片(slice)

  指向底层数组的指针。不需要定义长度。和数组在写法上的区别就是不需要指定长度

  对比:

 

  默念:数组有长度,切片没长度,数组有长度,切片没长度......

  如果多个slice指向同一个底层数组,其中一个改变了数组的值,则其他如果包括这个key的值也会改变

  如果slice增加时,导致数组超长,则会再次分配一个新的数组。其他slice可能就会指向这个新的底层数组,这个前一个改变了底层数组的值可能是第一个底层数组,所以第二个slice的key 指向的是第二个底层数组。这点有点混淆。来自无闻视频教程中讲解。

  方法:

 

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]

struct(结构体)

  个人理解:一种类型;

  例如:

    type person{

      Name string

      ages int

    }

    使用该类型需要定义该类型中两个属性

    

所有值传递不会改变内存中的值,只有引用类型该可以改变内存中的值

内建函数 make 用来为 slice,map 或 chan 类型分配内存和初始化一个对象(注意:只能用在这三种类型上),第一个参数也是一个类型而不是一个值

make slice

make map

mak channel