• go中的rune类型


    go语言中 ,rune其实是一种int32的数据类型的别名。

    1. // rune is an alias for int32 and is equivalent to int32 in all ways. It is
    2. // used, by convention, to distinguish character values from integer values.
    3. type rune = int32

    rune通常用于处理字符串中的单个字符,通常来区分整数值和字符值。

    看下面的例子:

    1. // 单元测试
    2. func TestRune1(t *testing.T) {
    3. fmt.Println("The Shy:", len("The Shy"))
    4. fmt.Println("英雄联盟:", len("英雄联盟"))
    5. }
    6. 结果:
    7. === RUN TestRune1
    8. The Shy: 7
    9. 英雄联盟: 12
    10. --- PASS: TestRune1 (0.00s)
    11. PASS

    看上面的结果The Shy: 7,这个好理解,英文的字符串的长度为7,英雄联盟: 12。为什么英雄联盟这个长度是12呢?

    这是因为go语言的编码是按照UTF-8编码规则来的。UTF-8是一套以 8 位为一个编码单位的可变长编码。汉字的16进制值得区间在UTF-8的第三区段,那么在go的编码下会占用三个字符。所以在我们对字符串进去处理的时候只需要将字符串通过range去遍历,会按照rune为单位自动去处理。

    1. func TestRune1(t *testing.T) {
    2. fmt.Println("The Shy:", len("The Shy"))
    3. fmt.Println("英雄联盟:", len("英雄联盟"))
    4. fmt.Println("-------------------")
    5. s := "英雄联盟"
    6. for k, v := range s {
    7. fmt.Printf("k:%v->v:%v->realValue:%c,", k, v, v)
    8. fmt.Println()
    9. }
    10. fmt.Println(len(s))
    11. }
    12. // 结果:
    13. === RUN TestRune1
    14. The Shy: 7
    15. 英雄联盟: 12
    16. -------------------
    17. k:0->v:33521->realValue:英,
    18. k:3->v:38596->realValue:雄,
    19. k:6->v:32852->realValue:联,
    20. k:9->v:30431->realValue:盟,
    21. 12
    22. --- PASS: TestRune1 (0.00s)
    23. PASS

    可以看到,rune已经将字符串中每个字符转换为Unicode码点。

    结果打印:打印出字符在字符串中的索引位置 k 和对应的Unicode码点 v 。

    那码点怎么转化为汉字呢?

    在Go语言中,可以使用  %c

    fmt.Printf("k:%v->v:%v->realValue:%c,", k, v, v)

    将Unicode码点转换为对应的字符(汉字)。其中,%c 是一个占位符,表示将一个Unicode码点格式化为对应的字符。

    小结:

    rune其实就是int32的数据类型,对于汉字等,将汉字转化为Unicode码点。

    可以通过%c来获取码点对应的值。

  • 相关阅读:
    ASUS华硕冰刃7笔记本GX650PY原装Windows11工厂安装包 恢复出厂开箱状态预装OEM系统 带MyASUS in WinRE重置功能
    京东工业API接口解析,实现根据ID取商品详情
    电装入股Coherent子公司SiC晶圆制造企业Silicon Carbide LLC
    数据准备之日志采集发展历程
    Ajax 笔记 01
    【时序】时间序列数据预处理
    spring cloud alibaba 简介
    协程学习(二)--协程切换及调度
    Linux - 还不懂 gdb 调试器?(调试软件)
    【Rust练习】18.特征 Trait
  • 原文地址:https://blog.csdn.net/Sunshineoe/article/details/134349492