类型表格
unsafe.Sizeof(x) x 变量占用的字节数
1字节 = 8 位
类型 | 符号 | 占用存储空间 | 表述范围 | 备注 |
---|---|---|---|---|
int8 | 有 | 1字节 | -128~127 | |
int16 | 有 | 2字节 | -215~215-1 | |
int32 | 有 | 4字节 | -231~231-1 | |
int64 | 有 | 8字节 | -263~263-1 | |
uint8 | 无 | 1字节 | 0~2^8-1 | |
uint16 | 无 | 2字节 | 0~2^16-1 | |
uint32 | 无 | 4字节 | 0~2^32-1 | |
uint64 | 无 | 8字节 | 0~2^64-1 | |
rune | 有 | 与int32一样 | -221~231-1 | 等价int32,标识一个Unicode码 |
byte | 无 | 与uint8等价 | 0~255 | 当要存储字符时选用byte |
单精度float32 | 有 | 4字节 | -3.403E38~3.403E38 | |
双精度float64 | 有 | 8字节 | -1.798E308~1.798E308 | float 默认类型 |
浮点类型
浮点数= 符号位+指数位+尾数位
尾数部分可能丢失,造成精度损失,float64的精度比float32要准确
字符类型
无专门字符类型,需要存储单个字符(字母),一般用byte来保存
字符串就是一串固定长度的字符连接起来的字符序列,go的字符串是由单个字节连接起来的
字符类型用单引号括起来的单个字符
允许使用转义字符'\'来将其后的字符转变为特殊字符的常量,例:var c3 char = '\n'
字符使用utf-8编码,
字符的本质是一个整数,直接输出时,是该字符对应的的utf-8编码的值
可以给某个变量赋值一个数字,然后按格式化输出时%c ,会输出对应的unicode字符
字符类型是可以运算的
字符串
双引号,会识别转义字符
反引号,以字符串的原生形式输出,包括换行和特殊符号
拼接方式 +
基本类型的默认值
数据类型 | 默认值 |
---|---|
整型 | 0 |
浮点型 | 0 |
字符串 | “” |
布尔类型 | false |
基本类型的相互转换
表达式T(v) 将值v转换为类型T
T:即常见的数据类型:int8,int16,int32,float32,float64
v:就是需要转换的变量
1.1 数据类型转换注意事项
1 转换范围可以从范围小到范围大,也可以从范围大到范围小
2 被转换的是变量存储的数据(即值),变量本身的数据类型并没有变化
3 转换中,如果将范围大转换范围小的,编译不会报错,只是转换的结果按移除处理
基本数据类型和string转换
程序开发中,经常将基本数据类型转成string
方式1 fmt.Sprintf("%参数",表达式),参数需要和表达式的数据类型相匹配,fmt.Sprintf() 会返回转换后的字符串
方式2 使用strconv包的函数
strconv.FormatInt(),strconv.FormatFloat(),strconv.FormatBool()
string类型转基本数据类型
使用strconv包的函数
strconv.ParseBool(),strconv.ParseFloat(),strconv.ParseInt()
指针
1 基本数据类型:变量存的就是值,值类型
2 获取变量的地址,用&,
3 指针类型:指针变量存的是一个地址,这个地址指向的空间存的才是值 var ptr *int = &num
4 获取指针类型所指向的值,使用:*,比如:var ptr *int 使用*ptr 获取ptr指向的值