首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rune()函数是如何工作的?

rune()函数是如何工作的?
EN

Stack Overflow用户
提问于 2016-08-24 10:16:55
回答 2查看 6.7K关注 0票数 3

我偶然发现了一个在网上发布的函数,它使用了rune()函数,但是我很难找到它是什么。我正在阅读教程,对文档缺乏经验,所以很难找到我要找的东西。

具体来说,我想知道为什么这个失败..。

代码语言:javascript
复制
fmt.Println(rune("foo"))

但这并不是

代码语言:javascript
复制
fmt.Println([]rune("foo"))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-24 10:45:42

rune是Go中的一个类型。它只是int32的别名,但通常用于表示Unicode点。rune()不是一个函数,它是将类型转换为rune的语法。Go中的转换始终具有语法type(),这可能使它们看起来像函数。

第一段代码会失败,因为在Go中没有定义字符串到数值类型的转换。然而,字符串到runes/int32s切片的转换在语言规范中是这样定义的:

将字符串类型的值转换为runes类型的片段将产生一个包含字符串的单个Unicode代码点的切片。[golang.org]

因此,您的示例输出一段文字,其值为102、111和111。

票数 8
EN

Stack Overflow用户

发布于 2020-07-05 09:36:44

正如@Michael's 一流评论 fmt.Println([]rune("foo"))中所述,将字符串转换为runes []符文的片段。当您将字符串转换为[]符文时,该字符串中的每个utf-8字符都会变成一个符文。见https://stackoverflow.com/a/51611567/12817546。类似地,在反向转换中,当从[]rune转换为string时,每个rune都成为字符串中的utf-8字符。见https://stackoverflow.com/a/51611567/12817546。[]符文也可以设置为字节、float64、int或bool。

代码语言:javascript
复制
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“,string(r)打印”string foo“,r[0] != 0并显示”bool true“。

[]规范本机支持符文到字符串的转换。请参阅https://stackoverflow.com/a/46021588/12817546中的评论。在Go中,字符串是一个字节序列。但是,由于多个字节可以表示一个符文代码点,一个字符串值也可以包含runes。因此,它可以转换为[]符文,反之亦然。见https://stackoverflow.com/a/19325804/12817546

注意,Go中只有两个内置类型别名,即字节(uint8别名)和rune (int32别名)。见https://Go101.org/article/type-system-overview.html。符文只是32位的整数值.例如,符文文字'a‘实际上是数字"97“。见https://stackoverflow.com/a/19311218/12817546。经编辑的引号。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39120506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档