Go语言学习 | 青训营笔记

98 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第1篇笔记

类型

  • 预定义类型

    均为值语义

    • 有符号整数:int, int8, int16, int32 (别名rune), int64

    • 无符号整数:uint, uintptr, uint8 (别名byte), uint16, uint32, uint64

    • 浮点数:float32, float64, complex32, complex64

    • 布尔值:boolean

    • 字符串:string

  • 复合类型

    数组、结构、指针为值语义,切片、映射、管道、函数、接口为引用语义

    • 数组 [N]T:N个T类型的值所组成的序列

    • 切片 []T:到底层T类型数组的变长子序列的引用

    • 管道 chan T, chan<- T, T <-chan:T类型的阻塞队列,可以在不同的goroutine中并发地访问,可用于select语句

    • 映射 [K]V:K类型的键到V类型的值的哈希表

    • 指针 *T:到T类型值的句柄

    • 结构 struct {...}:若干个具名字段的聚合

    • 函数 func(...)(...):子例程

    • 接口 interface {...}:实现若干方法的多态值,interface{}别名any

表达式

  • 字面值

    • 标量字面值

      • 空指针常量:nil (引用语义类型的零值)
      • 布尔常量:true, false
      • 整数递增:itoa
      • 整数字面值、浮点字面值、纯虚数字面值
      • 字符字面值
      • 普通字符串字面值、原始字符串字面值
    • 复合字面值

      Type{...}

      对于嵌套的复合字面值,内层除结构类型外的Type可以省略,取址可以省略

      • 数组字面值
      • 切片字面值
      • 映射字面值
      • 结构字面值
    • 函数字面值

      func(...)(...) {...}

  • Primary表达式

    • 标识符、包.标识符、字面值、(表达式)

    • 取下标 a[i]

      • 字符串、数组、数组指针、切片:越界时pacnic
      • 映射:键不存在或映射为nil时返回nil,可以额外返回一个ok值判断键是否存在
    • 取切片 a[low:high], a[low:high:bound]

    • 取成员

    • 方法表达式

    • 类型断言 v.(Type)

      • 接口:若失败则pacnic;可以额外返回一个ok,此时失败则返回nil
    • 转型 Type(v)

      可转型的条件

      • 可赋值
      • 数值类型之间
      • 整数, []byte, []runestringstring[]byte, []rune
      • []T*[N]T
  • 操作符

    • 数值运算

    • 字符串拼接

    • 不等比较:仅适用数值和字符串

    • 判等比较:还适用若干复合类型

    • 逻辑运算

    • 取址和解引用

    • 接收<-ch和发送ch<-v