Go 语言中的 25 个关键字[1]
包相关
import 和 package
声明相关
var, const, type, struct, interface, func, chan, map, go
循环相关
for 和 range
条件判断相关
if, else, switch, select, case
中断或返回
return, goto, fallthrougth, break, default, continue
延迟执行
defer
内置的预声明的常量、类型和函数[1]
常量:
true, false, iota 和 nil
类型:
- 整型: int, int8, int16, int32 和 int64
- 无符号整型: uint, uint8, uint16, uint32, uint64 和 uintptr
- 浮点型:float32,float64, complex64 和 complex128
- 其他:bool, type, rune, string 和 error
函数:
make, len, cap, new, append, copy, close, delete, complex, real, imag, panic, recover
问题
1. int 和 int8, int16 等有什么区别, 同样的 uint 和 uint8, uint16 呢?
参考【2】
int8, int16, int32 和 int64 四种有符号整型数分类, 分别对应 8,16,32,64bit 大小的有符号整型数。
与此对应的是 uint8, uint16, uint32, uint64四种无符号整型类型。
int 和 uint 和 cpu 平台机器字节大小有关, 32 或 64 bit.
byte 也是 uint8 类型的等价类型, byte 类型用于强调数值是一个原始的数据而不是一个小的整数。
unicode字符 rune 类型是和int32等价的类型, 通常用于表示一个 unicode 码点。这两个名称可以互换使用。
无符号整型类型 uintptr, 没有指定具体的bit大小但是足以容纳指针。
最后:
int, uint 和 uintptr 是不同类型的兄弟类型。
其中 int 和 int32 是不同的类型, 即使int的大小也是 32bit, 在需要将 int 当做 int32 时, 需要显示的类型转换操作,反之亦然。
代码验证:
package main
import (
"fmt"
"unsafe"
)
func main() {
var i1 int = 1
var i2 int8 = 2
var i3 int16 = 3
var i4 int32 = 4
var i5 int64 = 5
fmt.Println(unsafe.Sizeof(i1))
fmt.Println(unsafe.Sizeof(i2))
fmt.Println(unsafe.Sizeof(i3))
fmt.Println(unsafe.Sizeof(i4))
fmt.Println(unsafe.Sizeof(i5))
}
// 代码输出结果
/*
8
1
2
4
8
*/
参考
1.《go语言极简一本通》, page 3
2.《go语言圣经》, chapter 3.1