这是我参与「第三届青训营 -后端场」笔记创作活动的第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
- 接口:若失败则pacnic;可以额外返回一个ok,此时失败则返回
-
转型
Type(v)可转型的条件
- 可赋值
- 数值类型之间
- 整数,
[]byte,[]rune转string,string转[]byte,[]rune []T转*[N]T
-
-
操作符
-
数值运算
-
字符串拼接
-
不等比较:仅适用数值和字符串
-
判等比较:还适用若干复合类型
-
逻辑运算
-
取址和解引用
-
接收
<-ch和发送ch<-v
-