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位复数 |
1
2
3
4
|
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 |
布尔型
关于别名
两个名称可以混用,本质上就是同一个类型。
1
2
3
4
|
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,比如在有中文的情况下。
1
2
3
|
var s string = "Hello,世界!"
fmt.Println(len(s)) //15 byte长度
fmt.Println(utf8.RuneCountInString(s)) //9 rune长度
|