rune 与 string 的区别和联系(笔记)

  1. rune 可以看作以 Unicode 码点为单位的 byte,区别在于:
    byte 是定长的,固定 8 个比特位,
    rune 是不定长的,根据 Unicode 码点需要的存储容量变长;
    一个 Unicode 码点 ==> 1 rune ==> 1~n byte
  2. len(str) 返回字符串的字节个数,是存储所占 byte 的数量,而不是 rune 数量
    str := "你好 Hello World!"
    for i := 0; i < len(str); i++ {
    	fmt.Printf("%c", str[i])
    }
    ä½ å¥½ Hello World!
    
    这段代码就是错误遍历字符串的典型,正确方式是使用 range,如下:
    str := "你好 Hello World!"
    for _, v := range str {
    	fmt.Printf("%c", v)
    }
    你好 Hello World!
    
  3. string 与 []rune 切片能够实现互转
    str := "你好 Hello World!"
    runes := []rune(str) // string 转 []rune
    for i := 0; i < len(runes); i++ {
    	fmt.Printf("%c", runes[i])
    }
    
    fmt.Println()
    str2 := string(runes) // []rune 转 string
    fmt.Println(str2)
    你好 Hello World!
    你好 Hello World!
    
  4. rune 为什么是 int32 的别名,而不是 uint32 呢?
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值