小奋斗 - 轻松学习从此开始!
IT小奋斗群 QQ群:62017228

Go 数组(array)、切片(slice)、map、结构体(struct)

一 数组(array)

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

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

声明:var arrayName[arraySize]dataType

初始化:var b = [10]int{1,2,3,4,5,6,7,8,9,0}

或  :var b = [10]int{1,2,3,4,5}  //不足自动补0

循环  :for i := range ArrayName {

fmt.Println(i)

}

多维数组:

声明:var [ArraySite][ArraySite]int

初始化:var a = [3][4]int{[4]int{1,2,3},[4]int{1,2,3},[4]int{1,2}} //不足补0

切片(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]

struct(结构体)

个人理解:一种类型;

例如:

type person{

Name string

ages int

}

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

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

我来评几句
登录后评论

已发表评论数(0)