类型 | 长度(字节) | 默认值 | 说明 | |
---|---|---|---|---|
bool | 1 | false | ||
byte | 1 | 0 | uint8 | |
rune | 4 | 0 | Unicode Code Point, int32 | |
int, uint | 4或8 | 0 | 32 或 64 位 | |
int8, uint8 | 1 | 0 | -128 ~ 127, 0 ~ 255,byte是uint8 的别名 | |
int16, uint16 | 2 | 0 | -32768 ~ 32767, 0 ~ 65535 | |
int32, uint32 | 4 | 0 | -21亿~ 21亿, 0 ~ 42亿,rune是int32 的别名 | |
int64, uint64 | 8 | 0 | ||
float32 | 4 | 0.0 | ||
float64 | 8 | 0.0 | 默认浮点数类型 | |
complex64 | 8 | |||
complex128 | 16 | |||
uintptr | 4或8 | 以存储指针的 uint32 或 uint64 整数 | ||
array | 值类型(数组) | |||
struct | 值类型(结构体) | |||
string | "" | UTF-8 字符串,默认值为空字符串,而非nil | ||
slice | nil | 引用类型(切片) | ||
map | nil | |||
channel | nil | |||
interface | nil | 接口 | ||
function | nil | 函数 |
标准库math定义了各数字类型的取值范围
math.MinInt8等...
标准库strconv可在不同进制(字符串)间转化
整数
查看字节数:unsafe.Sizeof(num)
查看类型:%T
golang程序中整数变量在使用时,遵守保小不保大(存储空间)
浮点类型
容易造成精度损失
底层存储:符号位+指数位+尾数位(尾数位数据比较模糊)
3.14->314E-2(科学计数法)
float32、float64可以表示正负
golang中浮点数类型默认为float64
字符类型
golang中没有专门的字符类型,如果要存储单个的字符(字母),一般使用byte来保存
golang中使用UTF-8编码
字符类型本质上就是一个整数,也可以直接参与运算,输出字符的时候,会对应的码值进行输出
字母,数字,标点等字符,底层是按照ASCLL进行存储
byte 0-255
汉字使用的是Unicode,byte类型会溢出,可以用int
总结:golang的字符对应的使用的是UTF-8编码(Unicode是对应的字符集,UTF-8是Unicode的其中一种编码方案)
显示对应的字符,格式化输出%c
转义字符
\转义字符:将后面的字母表示为特殊含义
\n 换行
\b 退格
\r 光标回到本行开头,后续输入就会替换原有的字符
\t 制表符(和前面的组合,8个为一个制表符)
布尔类型
只允许取值true和false
占一个字节
适用于逻辑运算,一般用于流程控制
字符串类型
字符串就是一串固定长度的字符连起来的字符序列
字符串是不可变的,指的是字符串一但定义好,其中的字符的值不能改变
字符串的表示形式:
如果字符串中没有特殊字符,字符串的表示用双引号
如果字符串中有特殊字符,字符串的表示形式用反引号``
字符串的拼接用+即可,当字符串过长需要换【行时,加号+保留在上一行最后
基本数据类型间的转换
golang在不同类型的变量之间赋值时需要显示转换,并且只有显式转换(强制转换)
T(v)
int64转为int8的时候,编译不会出错,但是会数据的溢出
多种数据进行运算时,一定要匹配=左右两边的类型
基本数据类型和string的转换
基本》string
方式一:fmt.Sprintf("%参数",表达式)
方式二:使用strconv包的函数(参数限制条件比较多)
string》基本
使用strconv包的函数
修改字符串
func changeString() {
s1 := "hello"
// 强制类型转换
byteS1 := []byte(s1)
byteS1[0] = 'H'
fmt.Println(string(byteS1))
s2 := "博客"
runeS2 := []rune(s2)
runeS2[0] = '狗'
fmt.Println(string(runeS2))
}