一、数据类型分类
二、基本数据类型
基本数据类型包含数值型、字符型、布尔型以及字符串,下面说明每种类型的用法。
(一)数值型
1、整数类型
整数类型就是用于存放整数值的。
- 类型一览
类型 | 有无符号 | 占用存储空间 | 表数范围 |
int | 有 |
32位系统4字节 64位系统8字节 |
-231~231-1 |
int8 | 有 | 1字节 | -128~127 |
int16 | 有 | 2字节 | -215~215-1 |
int32 | 有 | 4字节 | -231~231-1 |
int64 | 有 | 8字节 | -263~263-1 |
rune | 有 | 与int32一样 | -231~231-1 |
uint | 无 |
32位系统4字节 64位系统8字节 |
0~232-1 0-264-1 |
uint8 | 无 | 1字节 | 0~255 |
uint16 | 无 | 2字节 | 0~216-1 |
uint32 | 无 | 4字节 | 0~232-1 |
uint64 | 无 | 8字节 | 0~264-1 |
byte | 无 | 与uint8等价 | 0~255 |
可以看出有无符号的区别是数的表示范围不一样。
- 使用
package main import "fmt" func main() { //有符号int8 var i int8 = 127 fmt.Println("i=",i) //无符号int8 var j uint8 = 250 fmt.Println("j=",j) }
执行结果为:
PS D:go_projectsrcgo_tutorialday02int_ 1> go run .main.go i= 127 j= 250
- 注意事项
(1)go语言中有符号与无符号表示数的范围不同,int与uint的范围与操作系统有关
(2)整型默认声明类型为int
package main import ( "fmt" "unsafe" ) func main() { var a = 10 // 查看默认类型 fmt.Printf("a的类型为%T ", a) //a的类型为int // 查看a变量占用的字节的大小 fmt.Printf("a占用的字节大小%d", unsafe.Sizeof(a)) //a占用的字节大小8 }
2、浮点类型
浮点数类型就是用来存放小数类型的。
- 类型一览
类型 | 有无符号 | 占用存储空间 | 表数范围 |
float32 | 有 |
4字节 |
-3.403E38~3.403E38 |
float64 | 有 | 8字节 | -1.798E308~1.798E308 |
- 使用
package main import "fmt" func main() { // 浮点数在Go中的使用 var a float32 = -0.369 var b float64 = -0625 fmt.Println("a=", a, "b=", b) //a= -0.369 b= -405 // 尾数可能造成精度的丢失 var c float32 = -203.50000006 var d float64 = -203.50000006 fmt.Println("c=", c, "d=", d) //c= -203.5 d= -203.50000006 // Go中默认浮点型存储类型为float64 var e = 0.236 fmt.Printf("e的类型为%T", e) // e的类型为float64 }
- 注意事项
(1)浮点型存储由三部分构成 符号位+指数位+尾数位
(2)尾数位可能会造成精度的丢失,因此为了更加准确的存储精度高的数建议使用float64
(3)浮点数的默认类型位float64
(二)字符型
Go中没有专门的字符类型,如果存储单个字符类型,使用byte来实现。
1、使用
package main import "fmt" func main() { //1、使用byte来存储字符类型,值使用单引号('value')来表示,直接输出byte值就是输出对应的字符码值 var a = '0' var b = 'h' fmt.Println("a=", a, "b=", b) //a= 48 b= 104 //2、如果输出对应的字符,需要格式化输出 fmt.Printf("a=%c b=%c ", a, b) //a=0 b=h //3、byte类型的表数范围是0~255,如果存储的字符码值大于这个,可以使用int类型 //var c byte = '张' //constant 24352 overflows byte var c int ='张' fmt.Println("c=", c) //c= 24352 //4、如果给一个码值,按照格式化输出可以输出一个unicode字符 var d int = 24352 fmt.Printf("d=%c ", d) //d=张 //5、字符类型可以运算 var e = 'm' + 10 fmt.Println("e=", e) //e= 119 }
2、注意事项
- 如果保存的字符在ASCII表中,如a-z,0-9等,可以直接保存在byte中
- 如果保存的字符码值大于255,需要考虑使用int类型保存
- 如果需要输出字符本身,需要使用格式化输出
- 字符的本质是一个整数,所以直接输出byte会输出一个整数码值
3、字符本质探讨
- 字符的存储与读取
存储:字符--》码值--》二进制--》存储
读取:二进制--》码值--》字符--》读取
- 字符码值关系
字符与码值是通过字符编码表已经规定好的,是不能改变的。
(三)布尔类型
布尔类型也叫bool类型,它只允许取值true或者false。bool类型占1字节空间大小,一般用于各种逻辑运算中。
package main import ( "fmt" "unsafe" ) func main() { // 基本使用 var a = false fmt.Println("a=", a) //a= false // 占用字节 fmt.Println("a占用的字节大小为", unsafe.Sizeof(a)) //a占用的字节大小为 1 }
(四)字符串
字符串就是一串固定长度的字符连接起来的字符序列。Go语言中的字符串是由单个字节连接起来的。
1、使用
package main import "fmt" func main() { // 1、string基本使用 var a = "hello world!" fmt.Println(a) // 2、Go中的字符串是不可变的 // a[0] = 'k' // cannot assign to a[0] (strings are immutable) // fmt.Println(a) // 3、字符串中转义字符使用 b := "aaa bbb" fmt.Println(b) // 4、反引号``,以字符串原生形式输出 c := ` func main() { } ` fmt.Println(c) // 5、字符串拼接 d := "hello" + "world" fmt.Println(d) // 6、字符串多行处理 // 字符串分行,保留 + 到上一行 e := "hello" + "world" fmt.Println(e) }
2、注意事项
- Go语言中字符串的字节使用utf8编码
- 字符串一旦定义声明赋值了,就不能修改了
- 如果需要输出原生代码,可以使用反引号
- 可以通过”+“进行字符串拼接,如果字符串太长换行,需要将”+“保留在上一行,因为Go中每一行代码结束后会自动加上 ; 结束符