range 带中文的字符串的坑


本文摘自网络,作者,侵删。

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 带中文的字符串的坑

相关阅读 >>

Golang判断map是否存在key

[Go-linq]-Go的.net linq式查询方法

手撸Golang 行为型设计模式 责任链模式

Go的切片(进阶版)

rtmp协议视频平台easydss开发中如何通过Go语言 Gorm 框架钩子函数精简代码?

Go每日一库 [home-dir] 获取用户主目录

Go好用的类型转换第三方组件

基于 mysql 分布式锁,防止多副本应用初始化数据重复

舍弃python+c,salesforce将企业级软件全面迁移到Go语言

Go语言循环嵌套

更多相关阅读请进入《Go》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...

    暂无评论...