Go语言学习(4) - 基本数据类型

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型

序号类型和描述
1uint8:无符号8位整型(0到255)【2的8次方】
2uint16:无符号16位整型(0到65535)【2的16次方】
3uint32:无符号32位整型(0到4292967295)【2的32次方】
4uint64:无符号位64位整型(0到 18446744073709551615)【2的64次方】
5int8:有符号8位整型(-128到127)
6int16:有符号16位整型(-32768到32767)
7uint32:有符号32位整型(-2147483648到2147483647)
8uint64:有符号位64位整型(-9223372036854775808到 9223372036854775807)

还有其他数字类型

序号类型和描述
1byte 类似 uint8
2rune 类似int32
3uint 32或者64位,根据电脑机器的位数决定
4int 与uint一样大小
5uintptr 无符号整型,用于存放一个指针

当超过数据类型所要求的长度时,就会报错: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)
复制代码

这样就可以讲 我们拷贝的一段代码 原样输出。

以上主要讲解了 基本数据类型,后续 会继续讲解 派生数据类型。

欢迎关注我的公众号,第一时间接收文章推送~ 搜索公众号: 翻身码农把歌唱 或者 扫描下方二维码:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值