我有一个中文字符串:

x = "你好"

我想遍历它,并对其中的每个角色执行一些操作,例如:

for i, len := 0, len(x); i < len; i++ {
    foo( x[i] ) // do sth.
}

我发现len(x)将返回6而不是2,在Google之后我找到了返回字符串实际长度的方法RuneCountInString,但我仍然不知道如何循环以使x[i]获得正确的字符,例如x[0] == '你'.

谢谢

推荐答案

使用range.

x = "你好"
for _, c := range x {
    // do something with c
}

如果想要随机访问,则需要使用代码单元索引,而不是字符索引.幸运的是,没有充分的理由需要字符索引,所以代码单元索引就可以了.

大多数语言都有完全相同的问题.例如,Java和C#使用UTF-16,这也是一种可变长度编码(但有些人假装它不是).

有关Go为什么使用UTF-8的更多信息,请参阅UTF-8 Manifesto.

Go相关问答推荐

golang-jWT签名无效

Go:嵌入类型不能是类型参数""

Go Fiber和HTMX—HX—Trigger header被更改为HX—Trigger,这不是HTMX监听的内容

Go-Colly:将数据切片为POST请求

GORM Find(&;Room)操作使用空数据而不是实际数据填充 struct

通过渠道和goroutines增值1000倍

如何解析Go-Gin多部分请求中的 struct 切片

`docker system df` 与 `/system/df` (docker api 端点)

Cypher 查找(多个)最低 node

如何将验证器标记添加到嵌套字段

此 Golang 程序中的同步问题

加载 docker 镜像失败

从Go中的随机日期开始以天为单位获取时间

assert: mock: I don't know what to return because the method call was unexpected 在 Go 中编写单元测试时出错

来自洪流公告的奇怪同行字段

将shell输出绑定到Go中的 struct 的最佳方法?

如何在gorm中处理多个查询

为什么 go-cmp Equal() 说 struct 不是完全相等的,即使所有字段都非常相等?

为什么在 goroutine 中声明时,benbjohnson/clock 模拟计时器不执行?

如何从应用程序调用谷歌云身份 API