go基本类型和运算符
1.布尔类型 bool
非运算符:!
!T -> false
!F -> true
和运算符:&&
T && T -> true
T && F -> false
F && T -> false
F && F -> false
或运算符:||
T || T -> true
T || F -> true
F || T -> true
F || F -> false
2.数字类型
Go 语言支持整型和浮点型数字,并且原生支持复数。 Go 也有基于架构的类型,例如:int、uint 和 uintptr。 这些类型的长度都是根据运行程序所在的操作系统类型所决定的:
- int 和 uint 在 32 位操作系统上,它们均使用 32 位(4 个字节),在 64 位操作系统上,它们均使用 64 位(8 个字节)。
 - uintptr 的长度被设定为足够存放一个指针即可。
 
整数:
- int8(-128 -> 127)
 - int16(-32768 -> 32767)
 - int32(-2,147,483,648 -> 2,147,483,647)
 - int64(-9,223,372,036,854,775,808 -> 9,223,372,036,854,775,807)
 
无符号整数:
- uint8(0 -> 255)
 - uint16(0 -> 65,535)
 - uint32(0 -> 4,294,967,295)
 - uint64(0 -> 18,446,744,073,709,551,615)
 
int 型是计算最快的一种类型。 整型的零值为 0,浮点型的零值为 0.0。 **float32 精确到小数点后 7 位,float64 精确到小数点后 15 位。**由于精确度的缘故,你在使用 == 或者 != 来比较浮点数时应当非常小心。你最好在正式使用前测试对于精确度要求较高的运算。 你应该尽可能地使用 float64,因为 math 包中所有有关数学运算的函数都会要求接收这个类型。 你可以通过增加前缀 0 来表示 8 进制数(如:077),增加前缀 0x 来表示 16 进制数(如:0xFF),以及使用 e 来表示 10 的连乘(如: 1e3 = 1000,或者 6.022e23 = 6.022 x 1e23)。 你可以使用 a := uint64(0) 来同时完成类型转换和赋值操作,这样 a 的类型就是 uint64。
package main
import "fmt"
func main() {
    var n int16 = 34
    var m int32
    // compiler error: cannot use n (type int16) as type int32 in assignment
    //m = n
    m = int32(n)
    fmt.Printf("32 bit int is: %d\n", m)
    fmt.Printf("16 bit int is: %d\n", n)
}
//输出:
32 bit int is: 34
16 bit int is: 34
格式化说明符
**%d **用于格式化整数(%x 和 %X 用于格式化 16 进制表示的数字 **%g **用于格式化浮点型(%f 输出浮点数,%e 输出科学计数表示法) **%0d **用于规定输出定长的整数,其中开头的数字 0 是必须的
3.数字类型
Go 拥有以下复数类型: complex64 (32 位实数和虚数) complex128 (64 位实数和虚数) 复数使用 re+imI 来表示,其中 re 代表实数部分,im 代表虚数部分,I 代表根号负 1。 在使用格式化说明符时,可以使用 %v 来表示复数,但当你希望只表示其中的一个部分的时候需要使用 %f
4.位运算
二元运算符
- 按位与 &:
 
  1 & 1 -> 1
  1 & 0 -> 0
  0 & 1 -> 0
  0 & 0 -> 0
- 按位或 |:
 
  1 | 1 -> 1
  1 | 0 -> 1
  0 | 1 -> 1
  0 | 0 -> 0
- 按位异或 ^:
 
  1 ^ 1 -> 0
  1 ^ 0 -> 1
  0 ^ 1 -> 1
  0 ^ 0 -> 0
二元运算符
- 按位补足 ^: 该运算符与异或运算符一同使用,即 m^x,对于无符号 x 使用“全部位设置为 1”,对于有符号 x 时使用 m=-1。例如:
 
  ^2 = ^10 = -01 ^ 10 = -11
- 位左移 «: 用法:bitP « n。 bitP 的位向左移动 n 位,右侧空白部分使用 0 填充;如果 n 等于 2,则结果是 2 的相应倍数,即 2 的 n 次方。例如:
 
    1 << 10 // 等于 1 KB
    1 << 20 // 等于 1 MB
    1 << 30 // 等于 1 GB
- 位右移 »: 用法:bitP » n。 bitP 的位向右移动 n 位,左侧空白部分使用 0 填充;如果 n 等于 2,则结果是当前值除以 2 的 n 次方。
 
    1 << 10 // 等于 1 KB
    1 << 20 // 等于 1 MB
    1 << 30 // 等于 1 GB
位左移常见实现存储单位的用例
使用位左移与 iota 计数配合可优雅地实现存储单位的常量枚举:
type ByteSize float64
const (
    _ = iota // 通过赋值给空白标识符来忽略值
    KB ByteSize = 1<<(10*iota)
    MB
    GB
    TB
    PB
    EB
    ZB
    YB
)
5.运算符与优先级
| 优先级 | 运算符 | 
|---|---|
| 7 | ^ ! | 
| 6 | * / % « » & &^ | 
| 5 | + - | ^ | 
| 4 | == != < <= >= > | 
| 3 | <- | 
| 2 | && | 
| 1 | || | 
6.字符类型
格式化说明符
%c 用于表示字符 当和字符配合使用时,%v 或 %d 会输出用于表示该字符的整数 %U 输出格式为 U+hhhh 的字符串
- 判断是否为字母:unicode.IsLetter(ch)
 - 判断是否为数字:unicode.IsDigit(ch)
 - 判断是否为空白符号:unicode.IsSpace(ch)