Go学习笔记-其他数据类型 | 青训营笔记

69 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第4天

其他数据类型

指针

  • 一个指针对应一个变量的内存地址,我们可以通过指针来访问或更新一个变量的值。若变量是由表达式临时创建的,那么表达式也能接受取地址的操作,比如在函数中返回局部变量地址的行为是被允许的,该变量在函数执行完之后依然有效
  • 间接引用:通过指针访问变量的值
  • 重定向:通过指针修改变量的值
  • 指针的零值为nil

结构体

结构体就是一组字段

  • 结构体的字段通过点号访问
  • 当一个指针指向结构体时,可以通过(*p).element来访问结构体中的内容,也可以直接使用p.element来隐式间接引用

结构体的定义

type 结构体名 struct {
    字段1 字段类型,
    字段2 字段类型
}

结构体的创建

  • v := 结构体名{对应字段的值}

  • v := 结构体名{字段:值}

    • 没有列出来的字段将会被赋值为0

数组

数组的创建

var a [10]int

  • a为一个长度为10的int类型的数组,数组的长度不可改变
  • 可通过索引来给数组赋值
  • 也可在数组后加{}直接初始化数组

切片

切片的大小是可变的数组

切片的创建

s []int := a[low : high]

  • 切片会选择一个半开区间,包括low元素,不包括high元素
  • 切片实际上是对数组中一段数据的引用,修改切片当中的元素将会直接修改其底层数组中对应的数据
切片文法

s := []int{1,2,3}

这会先创建一个数组,然后构建引用其的切片

切片的默认行为

[:] 切片默认的下界是0,上届是数组的长度

切片的长度和容量

长度:切片所包含的元素个数 len(s)

容量:切片包含的第一个元素到底层数组末尾元素的个数 cap(s)

nil切片

切片的零值为nil,nil切片的长度和容量为0且没有底层数组

创建动态数组

a := make([]int ,len, cap)

make会分配一个元素为零值的数组并返回一个引用了他的切片

切片的切片

切片可包含任何类型,其类型也可以是切片,也就是说,切片里存放的还是切片,类似于C语言中的二维数组

追加

append(s,1)

利用append函数向切片追加新的元素,当底层数组大小不够时,会分配一个更大的数组,切片指向新分配的数组

遍历

使用for和range遍历切片或映射

使用range遍历切片会返回元素的下标和元素

for _,j := range s{
    fmt.Printf(j)
}
  • _来代替不需要的值,若只想获得索引,不写第二个变量即可

映射

映射的零值为nil,nil映射没有键,也不能添加键

创建映射

var m = map[键类型]值类型

可以直接为其添加键和值

修改映射

  • 向映射中添加键值对或者修改键对应的值

m[key] = val

  • 删除映射中的键值对

delete(m,key)

  • 获取值

val = m[key]

  • 检查键值对是否存在

val,ok = m[key] 第一个参数是值,第二个元素是布尔值,若存在键值对则返回true,反之则为false,值为对应类型的零值