Golang内置类型大致分为整型、浮点型、复数型、字符(串)型、接口类型、布尔型几类。
| 类型 | 备注 |
|---|
| byte | 是uint8的别名 |
| int | 对应平台机器字大小,有符号 |
| int8 | 8位有符号整型 |
| int16 | 16位有符号整型 |
| int32 | 32位有符号整型 |
| int64 | 64位有符号整型 |
| uint | 对应平台机器字大小,无符号 |
| uint8 | 8位无符号整型 |
| uint16 | 16位无符号整型 |
| uint32 | 32位无符号整型 |
| uint64 | 64位无符号整型 |
| uintptr | 足以容纳指针的整型 |
浮点型#
| 类型 | 备注 |
|---|
| float32 | 32位浮点数 |
| float64 | 64位浮点数,浮点数字面值推导为该类型 |
复数型#
| 类型 | 备注 |
|---|
| complex64 | 64位复数 |
| complex128 | 128位复数 |
var complex_num complex128 = complex(1, 2)
fmt.Println(complex_num) //(1+2i)
fmt.Println(real(complex_num)) //1
fmt.Println(imag(complex_num)) //2
字符和字符串型#
| 类型 | 备注 |
|---|
| string | 字符串,不可改变 |
| rune | Unicode码点,int32别名 |
接口类型#
| 类型 | 备注 |
|---|
| error | 包含一个返回string的方法Error |
布尔型#
关于别名#
两个名称可以混用,本质上就是同一个类型。
var b byte = 0
fmt.Printf("%T\n", b) //uint8
var r rune = 0
fmt.Printf("%T\n", r) //int32
关于rune和byte#
byte是物理意义上的概念,着重表示内存大小,rune是人类理解上的概念,表示一个有意义的字符。一个rune并不总是等于一个byte,比如在有中文的情况下。
var s string = "Hello,世界!"
fmt.Println(len(s)) //15 byte长度
fmt.Println(utf8.RuneCountInString(s)) //9 rune长度