golang中的rune类型

前言

在学习golang基础的时候,发现有个叫rune的的数据类型,因为本人之前一直学习的是Java相关的知识,这里对于golang里面的rune类型确实感到很不理解。因此,特写这篇文章一探究竟。

正文

官方文档解释
// rune is an alias for int32 and is equivalent to int32 in all ways. It is
// used, by convention, to distinguish character values from integer values.

//int32的别名,几乎在所有方面等同于int32
//它用来区分字符值和整数值

type rune = int32

这样可能还是对rune的作用与意义比较懵逼,我们通过一个简单的demo来看下rune的作用。先来看下下面这块代码执行结果是什么?

golang中的rune类型_第1张图片
运行结果:
在这里插入图片描述
猜测结果应该是:8,5个字符1个空格2个汉字。实际上程序的运行结果为12。这是因为:golang中的字符串底层实现是通过byte数组的,中文字符在unicode下占2个字节,在utf-8编码下占3个字节,而golang默认编码正好是utf-8。

如果我们预期想得到一个字符串的长度,而不是字符串底层占得字节长度,该怎么办呢???

golang中的rune类型_第2张图片
golang中的rune类型_第3张图片
golang中byte数据类型与rune相似,它们都是用来表示字符类型的变量类型。它们的不同在于:

byte 等同于int8,常用来处理ascii字符
rune 等同于int32,常用来处理unicode或utf-8字符

你可能感兴趣的:(golang基础)