MENU

Go语言基础总结

November 1, 2020 • 技术分享

说明

本文仅对

  • 变、常量
  • 数据类型
  • 流程控制
  • 数组
  • 切片
  • Map

做了总结,过于基础的不再总结。

变、常量

  1. Go中有25个关键字;37个保留字
  2. 变量是为了更方便的操作数据,实际存储的也是内存地址
  3. := 仅函数内部可用
  4. _ 匿名变量
  5. const 常量定义后必须赋值
  6. iota要和const配合使用,可以理解为常量的索引

数据类型

  1. bool类型默认为false
  2. bool不参与运算且无法与其他类型转换
  3. Go中有两种,一种是byte或者uint8代表了ASCII码的一个字符,另一种是rune代表一个UTF8字符
  4. 我们处理中文字符务必使用 for range 使用 fori 就会类似byte的效果,取到的是ASCII字节
  5. 修改字符串使用强制转换 []rune,会重新分配内存地址并复制字节数组
  6. T(表达式),强转。

流程控制

  1. if可以加执行语句,如 if a := 1; a > 7 {}
  2. for去掉起始语句和条件语句即为while,for 初始语句; 条件语句; 结束语句 {}
  3. for{} 即为无限循环
  4. for range有如下规律

    • 数组、切片、字符串、可变参数列表返回索引值
    • map返回 key 和 value
    • 通道(channel)返回通道内的值

Go中的ForRange.png

  1. switch默认加上了break,fallthrough可以执行满足条件的case的下一个case后退出
  2. break跳出循环,continue继续下次循环
  3. goto可以理解为无条件快速跳转到指定代码

数组

  1. 声明方式:var a [3]int, var a [3]int{}, var a [3]string{"1", "2"}
  2. 自行推断数量的用法:[...]int{1, 2}
  3. 指定索引值:[...]int{1:3, 3:5}
  4. 支持多维数组,且只有第一层才支持 ... 自行推断长度
  5. 数组是值类型,赋值和传参会赋值整个数组,即操作数组不影响原数组
  6. 数组支持 ==, !=操作符。因为内存总是被初始化过的
  7. [n]*T表示指针数组,*[n]T表示数组指针

切片

  1. []T 为切片声明,切片可以通过数组 a[low:high:max] 的表达形式(low默认为0可省略,0<=low<=high<=max<=cap(a))得到,也可以通过 make([]T, size, cap) 函数得到
  2. 切片使用 len(a) == 0判断,而非 nil
  3. nil值的切片底层无数组,且长度和容量都为0;但不能说长度容量都为0的切片一定是nil
  4. 切片共享底层数组,对同一底层数组的切片修改都会有影响
  5. append方法支持追加多个元素且会自动扩容
  6. 使用copy可以避免 4 内存地址共用导致的修改互相影响问题
  7. 删除 index 位置的元素:a = append(a[:index], a[index+1:]...)

Map

  1. map类型变量声明 var a map[string]int 未赋值则为nil,需用 make(map[keyType]valueType, cap) 声明
  2. value, ok := map[key] ok为true代表元素存在
  3. delete(map, key) 删除map中key为key的元素
  4. 元素为Map类型的切片:make([]map[int]string, 2)
  5. 元素值为切片类型的Map:make(map[string][]string, 3)
ArchivesQR Code
QR Code for this page
Tipping QR Code