Go语言中的数据类型包含两种:
- 基本数据类型(原生数据类型):整型、浮点型、布尔型、字符串、字符(byte、rune)
- 复合数据类型(派生数据类型):指针(pointer)、数组(array)、切片(slice)、映射(map)、函数(function)、结构体(struct)、通道(channel)
整型
整型分为两大类
- 按长度分:int8、int16、int32、int64、int
- 无符号整型:uint8、uint16、uint32、uint64、uint
其中,uint8就是byte型、int16对应C语言中的short型、int64对应C语言中的long型
序号 | 类型和描述 |
---|---|
1 | uint8:无符号8位整型(0到255)【2的8次方】 |
2 | uint16:无符号16位整型(0到65535)【2的16次方】 |
3 | uint32:无符号32位整型(0到4292967295)【2的32次方】 |
4 | uint64:无符号位64位整型(0到 18446744073709551615)【2的64次方】 |
5 | int8:有符号8位整型(-128到127) |
6 | int16:有符号16位整型(-32768到32767) |
7 | uint32:有符号32位整型(-2147483648到2147483647) |
8 | uint64:有符号位64位整型(-9223372036854775808到 9223372036854775807) |
还有其他数字类型
序号 | 类型和描述 |
---|---|
1 | byte 类似 uint8 |
2 | rune 类似int32 |
3 | uint 32或者64位,根据电脑机器的位数决定 |
4 | int 与uint一样大小 |
5 | uintptr 无符号整型,用于存放一个指针 |
当超过数据类型所要求的长度时,就会报错:constant xxx overflows byte。
字符
下面看一下 byte 和 rune 到底是不是 我们上面描述的,分别 对应 uint8 和 int32,代码如下,我们还是打印出变量的类型 和 值:
package main
import "fmt"
func main() {
a := 100
var b byte = 100
var c rune = 200
fmt.Printf("%T %v \n", a , a)
fmt.Printf("%T %v \n", b , b)
fmt.Printf("%T %v \n", c , c)
}
输出结果如下:
int 100
uint8 100
int32 200
事实证明,我们上面描述的是没有问题的。实际上,我们通常不会将 byte 和 rune 直接赋值为 数字类型,我们通常 赋值为 字符,类似于 Java 中的 char,如下:
var e byte = 'a'
var f rune = 'A'
fmt.Printf("%T %v \n", e , e)
fmt.Printf("%T %v \n", f , f)
输出结果如下:
uint8 97
int32 65
那么,byte 和 rune 有什么区别呢?我们先来看一个例子,假设 将 上面的 f 值 赋值为 汉字 大写的 一,那么 是怎么样的结果呢,然后将 e 的 值也赋值为 “一”,结果是什么呢?
我们会发现,将 f 赋值为 “一”,输出 为:int32 19968;将 e 赋值为 “一”,会报一个异常:constant 19968 overflows byte,这是因为 byte 即 uint8 的最大值 是 255,而 “一” 对应的值 为 19968,远远大于 uint8 的最大值。
byte 和 rune 的区别如下:
- byte型:其实就是 uint8 的别名,代表了一个ASCLL 码的一个字符
- rune型:其实就是 int32 ,代表了一个UTF-8字符,当需要处理中文等 unicode 字符集时就要用到 rune 类型
字符串
字符串在Go语言中是以基本数据类型出现的。
在Go语言中,字符串 即可以单行定义,又可以多行定义,单行定义 不需要阐述,下面我们介绍下定义多行字符串
- 双引号书写字符串被称为字符串字面量,这种字面量不能跨行;
- 多行字符串需要使用 “·” 反引号(位于Tab键上面的一个),多用于内嵌源码 和 内嵌数据;
- 在反引号中的所有代码不会被编译器识别,而只是作为字符串的一部分
当我们想 将 一段代码作为 字符串输出的时候,我们 发现 要输出 就只能 调为一行,但Go语言给我们提供了 多行字符串,如下:
temp := `
a := 100
var b byte = 256
var c rune = 200
fmt.Printf("%T %v \n", a , a)
fmt.Printf("%T %v \n", b , b)
fmt.Printf("%T %v \n", c , c)
`
fmt.Println(temp)
输出结果如下:
a := 100
var b byte = 256
var c rune = 200
fmt.Printf("%T %v \n", a , a)
fmt.Printf("%T %v \n", b , b)
fmt.Printf("%T %v \n", c , c)
这样就可以讲 我们拷贝的一段代码 原样输出。
以上主要讲解了 基本数据类型,后续 会继续讲解 派生数据类型。
欢迎关注我的公众号,第一时间接收文章推送~ 搜索公众号: 码咖 或者 扫描下方二维码:
qrcode_wx.jpg
网友评论