range 带中文的字符串的坑

哆啦在这A梦在哪 · · 565 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

package main

import "log"

const s = "g12.好G"

func main() {
    log.Println(len([]rune(s)))
    log.Println(len(s))
    for i, v := range s {
        if i == 5 {
            log.Println("this is five")
        }
        log.Println(i, ":", string(v))
                //log.Println(i, ":", v)
    }
}


大家先看一下上面的这段代码,预想一下输出。
基本知识点
golang默认使用的都是utf8编码,所以中文的占三位。而使用rune格式操作的时候,可以把中文当作一个长度来计算
以上代码输出结果

PS D:\mygo\src\test> go build
PS D:\mygo\src\test> ./test
2020/10/21 17:05:56 6
2020/10/21 17:05:56 8
2020/10/21 17:05:56 0 : g
2020/10/21 17:05:56 1 : 1
2020/10/21 17:05:56 2 : 2
2020/10/21 17:05:56 3 : .
2020/10/21 17:05:56 4 : 好
2020/10/21 17:05:56 7 : G

总结
在上面的结果结果中,没有输出第五位和第六位,而输出如果不加string转化,索引4的内容为“22909”,是一串数字
在有中文的字符串里面,便利的时候会把占用的其他两位滤过


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:哆啦在这A梦在哪

查看原文:range 带中文的字符串的坑

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

565 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传