1. 基本数据类型
整型
| 数据类型 | 说明 | 取值范围 |
|---|---|---|
| 有符号整数 | ||
| int | 有符号 | -9223372036854775808到9223372036854775807 |
| int8 | 有符号 8位整数 | -128到127 |
| int16 | 有符号 16位整数 | -32768到32767 |
| int32 | 有符号 32位整数 | -2147483648到2147483647 |
| int64 | 有符号 64位整数 | -9223372036854775808到9223372036854775807 |
| 无符号整数 | ||
| uint8 | 无符号 8位整数 | 0到256 |
| uint16 | 无符号 16位整数 | 0到65535 |
| uint32 | 无符号 32位整数 | 0到4294967295 |
| uint64 | 无符号 64位整数 | 0到18446744073709551615 |
关于int类型的取值范围,如果要把一个大的数字,放进小的数据类型则会放不进去。
var i1 int8 = 100
fmt.Println(i1) // 100 没有问题
// 如果赋值为200 则不行 因为int8取值范围最大是127
var i2 uint8 = 200
fmt.Println(i2) // 200 uint8 取值范围最大是0到255
在Go语言中 byte与uint8 是一样的,rune与int32是一样的,代表同一种数据类型。但是int和int64 不是同一种类型。
// byte uint8 的别称
// rune int32 的别称
var i1 uint8 = 100
var i2 byte = i1
fmt.Println(i1,i2) //100,100
浮点
Go语言有两种精度的浮点数 float32 和 float64。
| 单精度 | 取值范围 | |
|---|---|---|
| float32 | 负数时 | -3.402823E38 到 -1.401298E-45 |
| float32 | 正数时 | 1.401298E-45 到 3.402823E38 |
| 双精度 | 取值范围 |
|---|---|
| float64 | -1.79E+308 到 +1.79E+308 |
1.79E-308 是 1.79 乘以 10的负308次方。 1.79E+308 是 1.79 乘以 10的308次方。
单精度双精度区别
在内存中占用的字节数不同
- 单精度浮点数占4个字节。
- 双精度浮点数占8个字节。
有效数字位数不同
- 单精度浮点数,有效数字
7位。 - 双精度浮点数,有效数字
16位。
- 单精度浮点数,有效数字
使用情况区别
- 单精度类型,一般用来表示
美元和分的时候使用。 - 超出人类经验的数字函数,例如
sin()`cos()`tan()`sqrt()`都使用双精度值。
- 单精度类型,一般用来表示
字符
错误
字符串
字符串就是多个byte的集合,一个字符串用双引号""或者单引号''表示
package main
import "fmt"
func main() {
s1 := "Test"
fmt.Printf("s1的类型是%T,值为%s\n", s1, s1) // s1的类型是string,值为Test
v1 := 'A'
v2 := "A"
fmt.Printf("v1的类型是%T,值为%d\n", v1, v1) // v1的类型是int32,值为65
fmt.Printf("v2的类型是%T,值为%s\n", v2, v2) // v2的类型是string,值为A
// 单引号存储的是 ASCII编码
// A的ASCII值A=65
// B的ASCII值B=66
// a的ASCII值a=97
v3 := '国'
fmt.Printf("v3的类型是%T, %d, %c, 值为%q\n", v3, v3, v3, v3) // v3的类型是int32, 22269, 国, 值为'国'
// 定义字符串
s2 := "你好 开启Go学习之路"
s3 := "hello go"
fmt.Println(s2) // 你好 开启Go学习之路
fmt.Println(s3) // hello go
// 字符串的长度
// 中文占3个字节
fmt.Println(len(s2)) // 21
fmt.Println(len(s3)) // 8
// 获取某个字节
fmt.Println(s2[0]) // 228
}
字符转义
package main
import "fmt"
func main() {
// 字符转义空格
fmt.Println("hello \t golang") // hello golang
// 输出换行
fmt.Println("hello \n golang")
// hello
// golang
// 回车符号
fmt.Println("hello \r golang")
// hello
// golang
// 输出路径
fmt.Println("E:\\golang\\go.jpg") // E:\golang\go.jpg
// 双引号
fmt.Println("hello \"golang\"") // hello "golang"
}
布尔
一个布尔类型的值只有两种结果,true或者false非真即假。往往使用在条件判断的时候。
package main
import "fmt"
func main() {
v := 100
fmt.Println(v == 200) // false
fmt.Println(v != 200) // true
}
2. 复合数据类型
数组
切片
字典
函数
指针
结构体
接口
通道
3. 数据类型的转换
go语言是静态语言,要求、定义、赋值、运算、类型一致才能进行操作。所以要进行操作的时候必须保证数据类型一致。需要注意的是,只有兼容的数据类型才能够转换。强制类型转换的语法Type(value)
package main
import "fmt"
func main() {
var v1 int8 = 100
var v2 int16
v2 = int16(v1)
// b=a 因为类型不同不能直接转换
fmt.Println(v1, v2) // 100 100
f1 := 3.14
var i1 int
i1 = int(f1)
fmt.Println(f1, i1) // 3.14 3 浮点类型转为整形的时候 只是取了整数部分
// 不是所有类型都能互相转换
// 数值类型的可以转换 int 和 bool 不能转换
}