为了账号安全,请及时绑定邮箱和手机立即绑定

遍历字符串返回 int32

遍历字符串返回 int32

Go
慕工程0101907 2023-05-15 09:44:06
为什么与其他语言不同,在 go 中遍历字符串返回int32值而不是原始字符?例如:func main() {    var s string    s = "Hello"    for _, v := range s {        fmt.Println(v)    }}退货:72101108108111我们应该像下面那样使用转换来获得原始字符吗?func main() {    var s string    s = "Hello"    for _, v := range s {        fmt.Println(string(v))    }}
查看完整描述

1 回答

?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

Go 编程语言规范

对于语句

对于带有范围子句的语句

对于字符串值,“范围”子句从字节索引 0 开始迭代字符串中的 Unicode 代码点。在连续迭代中,索引值将是连续 UTF-8 编码代码点的第一个字节的索引符文类型的字符串和第二个值将是相应代码点的值。如果迭代遇到无效的 UTF-8 序列,第二个值将为 0xFFFD,即 Unicode 替换字符,下一次迭代将在字符串中前进一个字节。


在 Go 中,一个字符是一个 Unicode 代码点,一个 Go 类型rune( 的别名int32)。Gostring用于以 UTF-8 编码形式存储 Unicode 代码点。


Go 编程语言规范

转换

与字符串类型之间的转换

将有符号或无符号整数值转换为字符串类型会生成一个包含整数的 UTF-8 表示形式的字符串。有效 Unicode 代码点范围之外的值将转换为“\uFFFD”。

string('a')       // "a"

string(-1)        // "\ufffd" == "\xef\xbf\xbd"

string(0xf8)      // "\u00f8" == "ø" == "\xc3\xb8"

type MyString string

MyString(0x65e5)  // "\u65e5" == "日" == "\xe6\x97\xa5"

例如,


package main


import (

    "fmt"

)


func main() {

    helloworld := "Hello, 世界"

    fmt.Println(helloworld)

    for i, r := range helloworld {

        fmt.Println(i, r, string(r))

    }

}

游乐场:https://play.golang.org/p/R5sBeGiJzR4

输出:


Hello, 世界

0 72 H

1 101 e

2 108 l

3 108 l

4 111 o

5 44 ,

6 32  

7 19990 世

10 30028 界


查看完整回答
反对 回复 2023-05-15
  • 1 回答
  • 0 关注
  • 96 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信