博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
go中rune和byte的用处
阅读量:6694 次
发布时间:2019-06-25

本文共 786 字,大约阅读时间需要 2 分钟。

参考:https://www.jianshu.com/p/4fbf529926ca

rune是用来区分字符值和整数值的

  • byte 等同于int8,即一个字节长度,常用来处理ascii字符
  • rune 等同于int32,即4个字节长度,常用来处理unicode或utf-8字符

举例说明:

package mainimport (    "fmt")func main() {    str := "你好 world"    fmt.Printf("len(str):%d\n", len(str)) //返回len(str):12}

返回值为12是因为中文字符在unicode下占2个字节,在utf-8编码下占3个字节,而golang默认编码正好是utf-8。

所以上面例子中的"你好"占据了六个字节

但是其实我们期望得到的结果是8,即不以字节数来计算长度,而是以字符数来计算长度

解决的办法就是将该string转成rune类型,rune类型为int32,即4个字节,能够很好地将utf-8编码下三字节长度的中文字符保存进来,这样就能够得到长度为8的值了

package mainimport (    "fmt")func main() {    str := "你好 world"    fmt.Printf("len(str):%d\n", len(str)) //返回len(str):12    fmt.Printf("len(rune(str)):%d\n", len([]rune(str))) //len(rune(str)):8}

同理可知,其实byte也是为了解决字符的问题,只是它是用来解决ascii字符的,所以长度短一些,为int8

 

转载于:https://www.cnblogs.com/wanghui-garcia/p/10568354.html

你可能感兴趣的文章
React 中的事件处理
查看>>
.NET环境大规模使用OpenTracing
查看>>
Sentry的使用
查看>>
如何在微服务架构中对资源(前端页面+后端接口)进行权限控制
查看>>
前端下载 图片 总结
查看>>
Vue表单输入绑定
查看>>
LINUX下进程打开的文件怎么和底层磁盘关联的?
查看>>
Java 设计模式之命令模式
查看>>
可能是把Java内存区域讲的最清楚的一篇文章
查看>>
PHP中的几个随机数生成函数
查看>>
Anaconda不同envs的pip和python的版本
查看>>
SQLServer之创建全文索引
查看>>
如何以并发方式在同一个流上执行多种操作?--复制流
查看>>
Spring Boot 参考指南(开发Web应用程序)
查看>>
javascript块级作用域处理闭包和释放内存的垃圾回收
查看>>
快速入门React
查看>>
正则表达式语法入门
查看>>
关于顶级、一级、二级域名如何理解?
查看>>
Laravel 5.6 正式发布(文档翻译工作将在春节后启动)
查看>>
兼容浏览器原生DOM的各种特性总结
查看>>