当前位置: 首页 > news >正文

湖南吉首建设官方网站营销式网站建设公司

湖南吉首建设官方网站,营销式网站建设公司,公司注册网上核名官网,wordpress安全防护【Go】rune和byte类型的认识与使用 大家好 我是寸铁#x1f44a; 总结了一篇rune和byte类型的认识与使用的文章✨ 喜欢的小伙伴可以点点关注 #x1f49d; byte和rune类型定义 byte,占用1个字节#xff0c;共8个比特位#xff0c;所以它实际上和uint8没什么本质区别,它表示…【Go】rune和byte类型的认识与使用 大家好 我是寸铁 总结了一篇rune和byte类型的认识与使用的文章✨ 喜欢的小伙伴可以点点关注 byte和rune类型定义 byte,占用1个字节共8个比特位所以它实际上和uint8没什么本质区别,它表示的是一个ASCII码字符。 rune占用4个字节共32个比特位所以它实际上和int32没什么本质区别,它表示的是一个Unicode字符 (Unicode是一种能表示世界上绝大部分字符的编码格式 不妨来验证一下能否用uint8和byte一样去表示一个字符能否用int32和rune一样去表示一个字符 Demo package mainimport fmtfunc main() {//byte与uint32var a byte avar b uint8 afmt.Println(使用byte类型表示字符:, string(a)) //afmt.Println(使用uint8类型表示字符串: , string(b)) //afmt.Println(---------------)var c rune bvar d int32 bfmt.Println(使用rune类型表示字符:, string(c)) //bfmt.Println(使用int32类型表示字符串: , string(d)) //b }运行结果如下 答案是可以的也证明了这两种实际上并无本质区别。 这次来验证一下能否用uint8和byte数组去表示一个字符串能否用int32和rune数组一样去表示一个字符串 demo package mainimport fmtfunc main() {str : nanas : []byte(str)fmt.Println(使用byte类型表示字符串: , string(s)) //nanastr1 : nanas1 : []uint8(str1)fmt.Println(使用uint8类型表示字符串: , string(s1)) //nanafmt.Println(____________________)str2 : nanagos2 : []rune(str2)fmt.Println(使用rune类型表示字符串: , string(s2)) //nanagostr3 : nanagos3 : []int32(str3)fmt.Println(使用int32类型表示字符串: , string(s3)) //nanago }运行结果如下 答案是可以的也证明了这两种实际上并无本质区别。 有人会问既然本质没什么区别为什么还要创建byte和rune类型 这就涉及到类型别名的概念众所周知Go语言有两种类型声明方式一种叫类型定义声明另一种叫类型别名声明。其中别名的使用在大型项目重构中作用最为明显它能够解决代码升级或者迁移过程中可能存在的类型兼容性问题。而rune和byte是Go语言中仅有的两个类型别名专门用于处理字符。当然我们可以通过type等关键字加号的方式声明更多的类型别名。 rune的使用 我们知道字符串由字符组成字符的底层由字节组成而一个字符串的底层的表示是一个字节序列(数组)。在Go语言中字符可以被分成两种类型处理: 对占一个字节的英文类字符可以使用byte或者uint8。对占1~4个字节的其他字符可以使用rune或者int32如中文、日文、特殊符号等。 示例说明: rune类型表示中文符号 如下图这说明可以用rune表示中文符号不能用byte表示中文符号没有定义rune类型去表示中文符号会出现溢出现象。 为什么会出现精度溢出 很明显刚才说到byte是一个字节而rune是1~4个字节。我们知道英文是1个字节中文是3个字节。byte最多只能表示一个字节的字符但是中文是3个字节的byte1个字节去表示3个字节的字符必定是不够的也就造成overflow(溢出)现象。 demo package mainimport fmtfunc main() {//使用rune类型表示一个中文 一个字符 字节序列var a rune 云fmt.Println(string(a))var b byte 云fmt.Println(string(b))//统计带中文的字符串长度}运行结果如下 所以rune的第一个作用是表示中文符号。 统计字符串的长度 举个例子统计带中文的字符串的长度 demo package mainimport fmtfunc main() {//统计带中文字符串的长度fmt.Println(len(Go语言编程)) //14//转换为rune数组后统计带中文字符串的长度fmt.Println(len([]rune(Go语言编程))) //6}运行结果如下 分析一下结果为什么直接打印就是14转换为rune[]数组后打印为6? 分析字符串在底层表示的是一个字节(byte)序列。其中英文字符占用1个字节中文字符占用3个字节。所以得到的是113*4 14是底层中字节序列占用字节的长度而不是字符的长度。使用rune[]数组后便可以统计出带中文字符串的字符长度。 所以第二个功能是统计字符串的长度。 截取字符串 举个例子截取带中文的字符串 截取Go语言这一段字符串的底层是一个字节序列(数组)字符串的截取 左闭右开 11338 下标从0开始起始索引为0终止索引为8(考虑到右边为开区间)。 demo s : Go语言编程fmt.Println(s[0:8])//字符串的截取 左闭右开 11338 下标从0开始运行结果如下 结果是对的但是存在一个缺陷就是每次截取时必须先计算出需要截取的字符串的字节索引如果说字节数计算错误就会出现乱码的情况。 验证一下: s : Go语言编程 fmt.Println(s[0:7]) s2 : Go语言编程 fmt.Println(s2[0:4])运行结果如下: 很明显出现乱码的情况。 除此之外假设字符串的长度非常大通过字节的方式去截取显然不是一个高效的方法。应该是取出字符的方式去截取字符串rune类型便可以实现这一点。其实从刚才的len取出byte和rune数组的长度就可以知道rune是直接操作字符而不是像byte一样去一个个操作字节。 使用rune类型运行截取字符串运行结果如下 所以rune的第三个功能是截取字符串。 rune实现分析 为什么rune类型可以做到这一点 简述: 首先先弄清楚string、byte、rune三者之间的关系。 字符串在底层的表示是由单个字节组成的一个不可修改的字节序列字节使用UTF-8编码标识Unicode文本。Unicode文本意味着.go文件可以包含世界上的任意语言或者字符该文件在任意系统上打开都不会乱码。UTF-8是Unicode的一种实现方式是一种针对Unicode可变长度的字符编码它定义了字符串以何种方式存储在内存中。UTF-8使用1~4为每个字符编码。 Go语言把字符分为byte和rune两种类型处理byte是uint8类型的别名用于存放占用1个字节的ASCII字符如英文字符返回的是字符的原始字节。rune类型是int32类型的别名用于存放多字节字符如占3个字节的中文字符返回的是字符Unicode码点值。 验证一下 说明上述的分析成立 demo s : Go语言编程 fmt.Println(byte类型: , []byte(s)) //输出: byte类型: [71 111 232 175 173 232 168 128 231 188 150 231 168 139]fmt.Println(rune类型: , []rune(s)) //输出: rune类型: [71 111 35821 35328 32534 31243]具体实现细节参考下面网址: https://www.cnblogs.com/cheyunhua/p/16007219.html 看到这里的小伙伴恭喜你又掌握了一个知识点 希望大家能取得胜利坚持就是胜利 我是寸铁我们下期再见
http://www.pierceye.com/news/388597/

相关文章:

  • 通州富阳网站建设做足彩网站推广
  • 一个公司做网站需要注意什么条件车之家汽车官网
  • 石家庄网站建设网站建设网站的制作哪家好
  • 苏州晶体公司网站网站排名优化各公司的
  • 网站开发大致多少钱团队拓展训练
  • p2p网站建设方案卫龙模仿iphone做网站
  • 做盗版电影网站犯法吗Wordpress 淘宝客 页面
  • 自己做网站费用html5结构的网站
  • wordpress做资源分享站做网站的图哪来
  • 国外设计欣赏网站线上建模培训班哪个好
  • 微信网站建设合同怎么在本地搭建网站
  • 班级网站怎么做网页制作临沂网站制作方案
  • 泰州网站建设服务好wordpress调用分类名
  • 中英切换的网站咋做怎样在网站做推广
  • 初学网站开发书籍如何提升网站打开速度
  • 深圳微信网站建设公司哪家好网站 维护 页面
  • 做个企业网站需要多少钱北京西站到大兴机场
  • 数字博物馆网站建设动态设计是什么意思
  • 沧州市做网站价格wordpress构建自己的网站
  • seo外链网站源码新公司注册核名
  • 游戏网站建设的策划方案python做电子商务网站
  • pxhere素材网站网上搞钱的野路子
  • 有没有帮人做数学题的网站9377游戏盒子
  • 微信网站建设报价网站优化提升排名
  • wap网站分享代码自定义网站建设
  • 网站换域名了怎么办seo百度帐号注册
  • 淄博网站建设公司羊肉片机网站模板制作
  • 邯郸网站设计价位南京h5 网站建设
  • wordpress主要函数seo是哪个英文的缩写
  • 自助建站网站seo公司静态网站作品