登录
首页 >  Golang >  Go问答

golang中的'range str'和'range []rune(str)'之间有什么区别吗

来源:Golang技术栈

时间:2023-04-05 10:37:37 170浏览 收藏

今日不肯埋头,明日何以抬头!每日一句努力自己的话哈哈~哈喽,今天我将给大家带来一篇《golang中的'range str'和'range []rune(str)'之间有什么区别吗》,主要内容是讲解golang等等,感兴趣的朋友可以收藏或者有更好的建议在评论提出,我都会认真看的!大家一起进步,一起学习!

问题内容

范围 str https://play.golang.org/p/I1JCUJnN41h

范围 []rune(str) https://play.golang.org/p/rJvyHH6lkl_t

我得到了相同的结果,它们是一样的吗?哪一个更好?

正确答案

是,有一点不同。给定

for i, c := range v {

c无论v是字符串还是符文切片,都将相同,但i如果字符串包含多字节字符,则会有所不同。

字符串索引

字符串是字节序列,索引适用于字节片。除非您有意读取或操作字节而不是代码点或字符,或者确定您的输入不包含多字节字符,否则无论您倾向于索引字符串,您都应该使用 rune 切片。

范围循环是特殊的

for i, c := range str {

字符串上的范围循环很特殊。不是将字符串简单地视为字节切片,而是range将字符串部分视为字节切片,部分视为符文切片。

i是代码点开头的字节索引。这c将是一个可以包含多个字节的符文。这意味着i在一次迭代中可以增加一个以上,因为之前的代码点是一个多字节字符。

除了 Go 源代码是 UTF-8 的公理细节之外,Go 实际上只有一种方式特别对待 UTF-8,那就是在字符串上使用 for range 循环时。我们已经看到了常规 for 循环会发生什么。相比之下,for range 循环在每次迭代中解码一个 UTF-8 编码的符文。每次循环循环,循环的索引是当前符文的起始位置,以字节为单位,代码点是它的值。

在官方 Go 博客文章中查看更多内容,以上内容摘自:Go 中的字符串、字节、符文和字符

终于介绍完啦!小伙伴们,这篇关于《golang中的'range str'和'range []rune(str)'之间有什么区别吗》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表