golang的rune()函数是如何工作的

我遇到了一个在线发布的函数,该rune()函数在 golang 中使用了该函数,但我很难查找它是什么。我正在阅读本教程并且对文档缺乏经验,因此很难找到我要查找的内容。

具体来说,我想看看为什么这会失败......

fmt.Println(rune("foo"))

而这并不

fmt.Println([]rune("foo"))


梦里花落0921
浏览 294回答 2
2回答

jeck猫

rune是 Go 中的一种类型。它只是 的别名int32,但通常用于表示 Unicode 点。rune()不是函数,它是类型转换为rune. Go 中的转换总是具有type()可能使它们看起来像函数的语法。代码的第一位失败,因为 Go 中没有定义字符串到数字类型的转换。然而,将字符串转换为 runes/int32s 切片在语言规范中是这样定义的:将字符串类型的值转换为 runes 类型的切片会产生一个切片,其中包含字符串的各个 Unicode 代码点。[ golang.org ]因此,您的示例打印出一片符文,其值为 102、111 和 111

胡子哥哥

fmt.Println([]rune("foo"))中所述,将字符串转换为符文 [] 符文切片。当您从字符串转换为 []rune 时,该字符串中的每个 utf-8 字符都会变成一个 Rune。请参阅https://stackoverflow.com/a/51611567/12817546。同样,在反向转换中,当从 []rune 转换为字符串时,每个 rune 都变成字符串中的一个 utf-8 char。请参阅https://stackoverflow.com/a/51611567/12817546。[]rune 也可以设置为字节、float64、int 或 bool。package mainimport (    . "fmt")func main() {    r := []rune("foo")    c := []interface{}{byte(r[0]), float64(r[0]), int(r[0]), r, string(r), r[0] != 0}    checkType(c)}func checkType(s []interface{}) {    for k, _ := range s {        Printf("%T %v\n", s[k], s[k])    }}byte(r[0])设置为“uint8 102”,float64(r[0])设置为“float64 102”,int(r[0])设置为“int 102”,r是符文“[]int32 [102 111 111]”,string(r)打印“string foo”,r[0] != 0并显示“bool true” .规范原生支持 []rune 到字符串的转换。请参阅https://stackoverflow.com/a/46021588/12817546中的评论。在 Go 中,字符串是一个字节序列。但是,由于多个字节可以表示一个符文代码点,因此字符串值也可以包含符文。因此,它可以转换为 []rune ,反之亦然。请参阅https://stackoverflow.com/a/19325804/12817546。注意,Go 中只有两个内置类型别名,byte(uint8 的别名)和 rune(int32 的别名)。请参阅https://Go101.org/article/type-system-overview.html。符文文字只是 32 位整数值。例如,符文文字“a”实际上是数字“97”。请参阅https://stackoverflow.com/a/19311218/12817546。行情已编辑。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go