Go的基本类型
- 布尔类型bool
- 长度:1字节
- 取值:布尔类型的取值只能是true或者false,不能用数字来表示
- 整型
- 通用整型 int / uint(有符号 / 无符号,下面也类似)
- 长度:根据运行平台可能为32(4个字节)位或者64位(8个字节)
- 8位整型 int8 / uint8
- 长度:1个字节
- 取值范围:-128~127 / 0~255
- 16位整型 int16 / uint16
- 长度:2个字节
- 取值范围:-32768~32767 / 0~65535
- 32位整型 int32 / uint32
- 长度:4个字节
- 取值范围: ~ / 0~
- 64位整型 int64 / uint64
- 长度:8个字节
- 取值范围: ~ / 0~
- 通用整型 int / uint(有符号 / 无符号,下面也类似)
- 浮点型
- 32位浮点型float32
- 长度:4个字节
- 小数点位数:精确到7小数位
- 64位浮点型float64
- 长度:8个字节
- 小数点位数:精确到15小数位
- 32位浮点型float32
- 复数
- 32位实数和虚数complex64
- 64位实数和虚数complex128
- 足够保存指针的32位或64位整型:uniptr
- 其它值类型
- array、 struct、string
- 引用类型
- slice、map、chan
- 接口类型:interface
- 函数类型:func
类型别名
当在使用某个类型时,可以给它起另外一个名字,然后就可以在代码中使用新的名字了。比如type MONEY int
,之后就可以使用MONEY
来操作int
型的数据了。
type(
整数 int32
小数 float64
)
var a 整数 = 1
值得注意的是,在Go中有两个类型byte
和rune
,它们分别是uint8
和uint32
的别名。其中,byte
是一个字节的长度,主要用来处理ascii字符;而rune
是4个字节长度,可以用来处理unicode或者utf-8字符
类型零值
零值并非空值,而是当变量被声明为某种类型后的默认值。通常情况下数值类型的默认值为0,bool类型的默认值为false,string类型的默认值为空字符串
Go的运算符
Go中的运算符都是从左往右结合的,一元运算符只可以用作一个值的操作(作为后缀),而二元运算符则可以和两个值或者操作数结合(作为中缀)。优先级越高的运算符可以优先执行,下面从上到下表示各个运算符优先级从高到低:
优先级 | 运算符 | 备注 |
---|---|---|
7 | ^ ! | 一元运算符,^按位取反,!逻辑非 |
6 | * / % << >> & &^ | *乘,/除,%取余,<<位左移,>>位右移,&按位与,&^按位清零 |
5 | + - | ^ | +加,-减,|按位或,^异或 |
4 | == != < <= >= > | ==等于,!=不等,<小于,<=小于等于,>=大于等于,>大于 |
3 | <- | 用于channel |
2 | && | 逻辑与 |
1 | || | 逻辑或 |
当然,可以通过括号来提升某个表达式的运算优先级
- 逻辑运算符
逻辑非!
逻辑或!true -> false !false -> true
||
逻辑与true || true -> true true || false -> true false || true -> true false || false -> false
&&
值得注意的是,在 Go 语言中,&& 和 || 具有短路性质,当运算符左边表达式的值已经能够决定整个表达式的值的时候(&& 左边的值为 false,|| 左边的值为 true),运算符右边的表达式将不会被执行。利用这个性质,如果你有多个条件判断,应当将计算过程较为复杂的表达式放在运算符的右侧以减少不必要的运算true || true -> true true || false -> false false || true -> false false || false -> false
- 位运算 (只能用于整型)
-
按位与& :将对应位上的值进行与运算,即两个都为1时结果才为1,否则为0
-
按位或|:将对应位上的值进行或运算,即只要有一个为1时结果为1,两个都为0时结果为0
-
按位异或^:对应位上的值相同,结果位0;否则结果为1
需要注意的时,
^
作为一元运算符时,功能是按位取反,包括符号位在内(注意有符号数和无符号数的区别)。举个例子:func main(){ var i uint8 = 20 fmt.Println(^i,^20) // 输出结果是:235 -21 }
上面的例子中,一个是有符号的数一个是无符号的数,第一个i为无符号的数,^i 即^0001 0100 = 1110 1011 ,则结果为235,是无符号的数;第二个20默认是有符号的数,结果也为有符号数,为其负数补码(一个有符号位的^操作为 这个数+1的相反数)
-
按位清零
&^
:对运算符左边的数的每一位根据运算符右边的数对应位上的值进行操作,如果右边数对应位上为1,则左边数对应位为0,如果右边数对应位上为0,则左边对应位的数不变4 &^ 5 -> 101 &^ 100 = 001
-
左移
<<
右移>>
:用法:num << n
或num >> n
向左或向右移动n位,空白部分用0填充
-
- 算术运算符
- 常见的用于整型和浮点型数的运算符有
+
,-
,*
,/
,其中/
对于整数运算,其结果还是整数 - 取余运算
%
只能作用于整数 - 可以将语句
a = a + b
简写为a += b
,同样的写法也适用于-=
,*=
,/=
,%=
- 在Go中,自增自减语句
++
,--
只能作为语句,不能作为表达式,比如n = i++
这样的写法是无效的
- 常见的用于整型和浮点型数的运算符有