
Go的数据类型分为四大类:
Go原生的整数分为有符号和无符号:
有符号:int8、int16、int32、int64
无符号:uinit8、uint16、uint32、uint64
除了原生类型,Go还有一些衍生整数:
注意:即便int与int32是相似的类型,但也是不同的类型,如果int值想当做int32使用,必须进行显示类型转换。
浮点数浮点数有两种类型:
在math包中记录了两种类型的最大值。绝大多数下优先选择float64,float32精度低累计误差较大(除非可控)。
浮点数常量的表示:
NaN,表示科学上无意义的运算结果,如0/0,sqrt(-1),通过match.IsNaN() 函数判断一个变量或表达式的值是否为NaN。
复数go支持两种类型的复数:
复数常量的表示:
布尔类型 :bool,只有两个取值true和false。
&&运算和||运算时具有短路行为特性的:如果运算符左边的操作数已经能直接确定总体结果,那右边的操作数不会计算。
bool无法隐式转换成整型,反之也不行。
常量(const变量)常量是一种表达式,所有常量基本都属于基本类型:
常量在语法上与变量类似,只是值恒定不变,其值在编译阶段得到(常量在编译时会使用具体值替换)。
const name string= "Jim" const pi = 3.14159 // 定义了常量 pi,没有指定类型根据值决定类型
对于常量的操作其结果依然是常量,如数学运算、逻辑运算、比较运算。
如果指定一组常量,除第一项之外其他项可以省略赋值,默认使用前一项的值:
const ( a = 1 b // 默认使用a的值 c = 2 d // 默认使用c的值 )
常量生成器 iota
iota从0开始取值,逐项加1:
const(
red int = iota // red 取值 0
blue // 取值iota,为1
yellow // 取值iota,为2
)
无类型常量(字面量)
golang中的无类型常量其实就是字面量的意思。一共分为六种:
将无类型常量赋值给变量时,会隐式转换为该变量类型:
var f float64 = 3+4i // 将复数 隐式转换为 float64 f = 2 // 将2 隐式转换为float64 // 没有指定变量类型时,无类型常量会被隐式转换为默认类型 i := 23 // 23 被默认转换为 int,i也为int f := 23.4 // 23.4 被默认转换为float64,f也为float64运算符
| 优先级 | 运算符 | 结合性 | 备注 |
|---|---|---|---|
| 1 | ^(取反)、!(取非) | 自右向左 | |
| 2 | * 、/、%(取余)、<<、>>、&(按位与)、&^(位清空) | 自左向右 | 取余只对整数有效 |
| 3 | +、-、|、^(异或) | 自左向右 | |
| 4 | ==、|=、<、<=、>、>= | 自左向右 | |
| 5 | && | 自左向右 | |
| 6 | || | 自左向右 |