• go中rune和byte的用处


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

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

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

    举例说明:

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

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

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

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

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

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

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

  • 相关阅读:
    60、剑指offer--把二叉树打印成多行
    59、剑指offer--按之字形顺序打印二叉树
    KNN(最近邻算法)
    RBM(受限玻尔兹曼机)
    Denoising Autoencod
    决策树算法
    AdaBoost算法简介
    suricata工作流程简介
    KD tree详解
    tesseract训练新字库
  • 原文地址:https://www.cnblogs.com/wanghui-garcia/p/10568354.html
Copyright © 2020-2023  润新知