视频学习地址:Go零基础入门_在线视频教程-CSDN程序员研修院
一. 基本类型总结
二. 位,字节和字
- 定义: 位、字节和字都是描述计算机数据单元或储存单元的术语,一般指储存单元
- 位(bit)是最小的储存单元,可储存0或1,是计算机内存的基本构建块
- 字节(byte)是常用的计算机储存单位,1字节=8位,8位就有256(2的8次方)种0、1的组合,即可0~255的整数或一组字符
- 字(word)是设计计算机时给定的自然储存单位,不同的电脑字长可能不同,对于8位的微型计算机,字长就是8位,32位计算机,1字=32位=4字节,64位计算机,1字=64位=8字节,现在的个人计算机通常都是64位,即 1字=64位。计算机字长越大,其数据转移就越快,允许的内存访问也更多。
- 8bit(位)=1Byte(字节)
1024Byte(字节)=1KB
1024KB=1MB
1024MB=1GB
1024GB=1TB
- 位与字节图示
三. 整型
int8、int16、int32、int64。在 内存中分别用 1、2、4、8 个字节来表达
- 整形类型
具体类型 | 取值范围 |
int8 | -128到127 |
uint8 | 0到255 |
int16 | -32768到32767 |
uint16 | 0到65535 |
int32 | -2147483648到2147483647 |
uint32 | 0到4294967295 |
int64 | -9223372036854775808到9223372036854775807 |
uint64 | 0到18446744073709551615 |
uint | 与操作系统有关 32位的系统是uint32, 64位的是uint64 |
int | 与操作系统有关 32位的系统是int32, 64位的是int64 |
var a int8
a = 129 // '129' (类型 untyped int) 不能由类型 int8 表示
四. 浮点型
- float类型分为float32和float64两种类型,这两种浮点型数据格式遵循 IEEE 754 标准。
- 单精度浮点数占用4个字节(32位)存储空间来存储一个浮点数。而双精度浮点数使用 8个字节(64位)存储空间来存储一个浮点数。
- 一个float32类型的浮点数可以提供大约6个十进制数的精度,而float64则可以提供约15或16个十进制数的精度
- 浮点类型默认声明为float64。
// 单精度浮点型
var f1 float32
f1 = 1.1254869873248965478
fmt.Println(f1, reflect.TypeOf(f1)) // 1.125487 float32
// 双精度浮点型
var f2 float64
f2 = 1.1254869873248965478
fmt.Println(f2, reflect.TypeOf(f2)) // 1.1254869873248965 float64
// 默认64
var f3 = 1.1254869873248965478
fmt.Println(f3, reflect.TypeOf(f2)) // 1.1254869873248965 float64
- 科学计数表示
var f1 = 2e8
fmt.Println(f1, reflect.TypeOf(f1))
var f2 = 2e-1
fmt.Println(f2, reflect.TypeOf(f2))
五. 布尔类型
- 定义:布尔型的值只可以是常量 true 或者 false。一个简单的例子:var b bool = true。
var b bool
b = true
b = false
fmt.Println(b)
fmt.Println(1 == 1)
fmt.Println(2 < 1)
六. 字符串类型
字符
- Golang中没有专门的字符类型,如果要存储单个字符(字母),一般使用byte来保存。
// 字符
var b byte
b = 'a'
fmt.Println(b) // 输出的是 ASCII码
// 字符本质是一个数字, 可以进行加减乘除
fmt.Println(b+1, reflect.TypeOf(b+1))
字符串
- 字符串就是一串固定长度的字符连接起来的字符序列。Go 的字符串是由单个字节连接起来的。Go 语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本。
// 字符串
var str string
str = "hello go"
fmt.Println(str)
- 字符串在内存中是一段连续存储空间
- 当你用 字符串[索引] 时 取到得到是字符 需要用 string(字符串[索引]) 转为 字符串
// 字符串
var str string
str = "hello go"
fmt.Println(string(str[0])) // h
- 字符串转为字符
str1 := []rune(str)
str1[0] = 'k'
fmt.Println(str, string(str1))
- 带中文的字符串
var str2 = "你好啊"
// 截取有中文的字符串
fmt.Println(string([]rune(str2)[0]))
// len()获得的是 byte 字节的数量 一个中文占用3个字节
fmt.Println(len(str2))
// 有中文时 取长度
fmt.Println(utf8.RuneCountInString(str2))
fmt.Println(len([]rune(str2)))