在学习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的作用与意义比较懵逼,我们通过一个简单的示例来看下rune的作用。先来看下下面这块代码执行结果是什么?

package main
import "fmt"func main() {var str = "hello 世界"fmt.Println("len(str):", len(str))
}

我们猜测结果应该是:8,因为5个英文字符 + 1个空格 + 2个汉字。那么正确答案是多少呢?

咦...结果居然是12,这是为什么呢!?

golang中string底层是通过byte数组实现的。中文字符在unicode下占2个字节,在utf-8编码下占3个字节,而golang默认编码正好是utf-8。

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

package mainimport ("fmt""unicode/utf8"
)func main() {var str = "hello 世界"//golang中string底层是通过byte数组实现的,直接求len 实际是在按字节长度计算  所以一个汉字占3个字节算了3个长度fmt.Println("len(str):", len(str))//以下两种都可以得到str的字符串长度//golang中的unicode/utf8包提供了用utf-8获取长度的方法fmt.Println("RuneCountInString:", utf8.RuneCountInString(str))//通过rune类型处理unicode字符fmt.Println("rune:", len([]rune(str)))
}

运行结果:

golang中还有一个byte数据类型与rune相似,它们都是用来表示字符类型的变量类型。它们的不同在于:

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

C++中utf-8和unicode互转就比较麻烦了

详情可参考笔者的另外一篇文章

https://blog.csdn.net/yzf279533105/article/details/50696416

go语言的rune类型相关推荐

  1. bool类型数组转换成一个整数_Go 学习笔记 02 | 基本数据类型以及 byte 和 rune 类型...

    一.基本数据类型 unsafe.Sizeof() 查看不同长度的整型在内存中的存储空间. 类型转换,高位向低位转换要注意溢出. 数字字面量语法. 64 位系统中 Go 语言中浮点数默认是 float6 ...

  2. go - rune类型

    一.简介 rune类型是Go语言的一种特殊数字类型. rune是类型int32的别名,在所有方面都等急啊于它,用来区分字符值跟整数值. Go语言通过rune处理中文,支持国际化多语言. 字符串由字符组 ...

  3. 14. Go 语言中的类型断言是什么?

    Hi,大家好,我是明哥. 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 <Go编程时光>,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适 ...

  4. C语言中不同类型的循环(Different types of loops in C)

    C语言中有三种类型的循环:for,while,do-while. while循环先判断循环条件. while (condition) {//gets executed after condition ...

  5. 【Go语言】【14】GO语言的接口类型

    1.什么是接口? 在面向对象的语言中,接口是用来限制实现类行为的.怎么理解这句话呢? 定义一个Person接口,我只会站在我的角度上考虑问题,比如Person(人),自然想到会吃饭.睡觉等: inte ...

  6. golang rune类型简介

    定义 rune关键字,它是int32的别名(-231~231-1),对于byte(-128-127),可表示的字符更多. 官方的解释如下: // rune is an alias for int32 ...

  7. python程序设计语言是什么类型的语言-Python 是弱类型的语言 强类型和弱类型的语言区别...

    Python 是弱类型的语言 在强类型的编程语言中,定义变量时要指明变量的类型,而且赋值的数据也必须是相同类型的,C语言.C++.Java 是强类型语言的代表. 下面我们以 C++ 为例来演示强类型语 ...

  8. 动态语言,静态类型,强类型定义语言,弱类型定义语言,

    1 动态语言和静态语言 通常我们所说的动态语言.静态语言是指动态类型语言和静态类型语言.    1 动态类型语言:动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时 ...

  9. 什么是python语言的动态类型机制_python的内存管理机制

    一.python是一个什么样类型的语言 1.python是一种动态解释性强类型定义的高级.通用性编程语言. 解释型:执行的时候,才一条一条的解释成机器语言给计算机来执行.如:python.js.rub ...

最新文章

  1. python代码实现二叉树中最低的公共祖先
  2. 仅支持BCH的众筹平台Coinfundr或能革新众筹业
  3. Redux vs Mobx系列(-):immutable vs mutable
  4. python numpy.mean() axis参数使用方法【sum(axis=*)是求和,mean(axis=*)是求平均值】
  5. Java垃圾回收(3)
  6. 手机 java服务器ip地址_java获取系统当前服务器IP地址
  7. ubuntu 18.04 vim的安装
  8. mysql 事务日志备份_SQL Server恢复模式与事务日志备份
  9. 2016年第3本:启示录----打造用户喜爱的产品
  10. 手机坏点如何测试软件,怎么检测手机屏幕坏点
  11. 关于数学公式的软件和markdown
  12. Ubuntu 16.04 状态栏实时显示网速、CPU、内存等
  13. re模块 match serach findall 详解
  14. 英语话题 topic 4: My hometown
  15. Window10下VS2019编译 Chromium
  16. EDA -- 灯开关设计
  17. PCI e 转 PXI 远程 转接 套件 PCI e / PXI 远程控制 器 模块 板卡
  18. 什么是Java的永久代(PermGen)内存泄漏
  19. TcpDump使用手册
  20. 自定义拍照时 拍照界面_摄影技巧,拍照时模特的眼睛应看向哪里?不同的眼神方向有何区别...

热门文章

  1. myeclipse中代码提示和编辑区颜色设置
  2. 过滤html标签的代码
  3. CodeForces - 1485F Copy or Prefix Sum(dp)
  4. UVA - 796 Critical Links(tarjan求割边)
  5. POJ - 1236 Network of Schools(强连通缩点)
  6. Linux下Anaconda3安装及使用教程
  7. Timus1286(欧几里德算法的应用)
  8. NJUST1712(形成三角形面积为整数的个数)
  9. 一分钟学会使用RichEdit控件
  10. Redis 过期键删除策略、内存淘汰机制