2 回答
TA贡献1909条经验 获得超7个赞
rune
是 Go 中的一种类型。它只是 的别名int32
,但通常用于表示 Unicode 点。rune()
不是函数,它是类型转换为rune
. Go 中的转换总是具有type()
可能使它们看起来像函数的语法。
代码的第一位失败,因为 Go 中没有定义字符串到数字类型的转换。然而,将字符串转换为 runes/int32s 切片在语言规范中是这样定义的:
将字符串类型的值转换为 runes 类型的切片会产生一个切片,其中包含字符串的各个 Unicode 代码点。[ golang.org ]
因此,您的示例打印出一片符文,其值为 102、111 和 111
TA贡献1825条经验 获得超6个赞
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 main
import (
. "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。行情已编辑。
- 2 回答
- 0 关注
- 293 浏览
添加回答
举报