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 时, 需要显示的类型转换操作,反之亦然。

代码验证:

  1. package main
  2. import (
  3. "fmt"
  4. "unsafe"
  5. )
  6. func main() {
  7. var i1 int = 1
  8. var i2 int8 = 2
  9. var i3 int16 = 3
  10. var i4 int32 = 4
  11. var i5 int64 = 5
  12. fmt.Println(unsafe.Sizeof(i1))
  13. fmt.Println(unsafe.Sizeof(i2))
  14. fmt.Println(unsafe.Sizeof(i3))
  15. fmt.Println(unsafe.Sizeof(i4))
  16. fmt.Println(unsafe.Sizeof(i5))
  17. }
  18. // 代码输出结果
  19. /*
  20. 8
  21. 1
  22. 2
  23. 4
  24. 8
  25. */

参考

1.《go语言极简一本通》, page 3
2.《go语言圣经》, chapter 3.1