返回介绍

04.5.1 rune 是什么?

发布于 2024-08-14 12:50:32 字数 4075 浏览 0 评论 0 收藏 0

rune是一个类型为int32的值,因此他主要用来代表一个Unicode码点。Unicode码点是一个代表Unicode字符的数值。

NOTE:你可以认为字符串是一系列rune的集合

rune字面量实际上是一个用单引号括起来的字符,并且与与Unicode码点的概念相关联。

rune.go将分两部分阐述rune的使用,第一部分是:

> package main
> 
> import (
>    "fmt"
> )
> 
> func main() {
>    const r1 = '€'
>    fmt.Println("(int32) r1:", r1)
>    fmt.Printf("(HEX) r1: %x\n", r1)
>    fmt.Printf("(as a String) r1: %s\n", r1)
>    fmt.Printf("(as a character) r1: %c\n", r1)

首先定义了一个rune字面量r1,然后使用不同的方式去打印,分别是int32、十六进制、字符串、字符,最终你会发现使用字符格式打印出的与定义r1的值相同。

第二部分:

> fmt.Println("A string is a collection of runes:", []byte("Mihalis"))
>    aString := []byte("Mihalis")
>    for x, y := range aString {
>       fmt.Println(x, y)
>       fmt.Printf("Char: %c\n", aString[x])
>    }
>    fmt.Printf("%s\n", aString)
> }

显而易见,字节切片实际上就是一系列runes的集合,并且如果你使用fmt.Println()打印字节切片,结果很可能不会符合你的预期。fmt.Printf()语句结合%c可以将runes转换为字符输出;如果想要以字符串的形式输出字节数组,应使用fmt.Printf()结合%s

执行runes.go得到下面的输出:

go run runes.go

(int32) r1: 8364
(HEX) r1: 20ac
(as a String) r1: %!s(int32=8364)
(as a character) r1: €
A string is a collection of runes: [77 105 104 97 108 105 115]
0 77
Char: M
1 105
Char: i
2 104
Char: h
3 97
Char: a
4 108
Char: l
5 105
Char: i
6 115
Char: s
Mihalis

最后,举一个产生illegal rune literal错误的例子:在导包的时候使用单引号。

$ cat a.go

package main

import (

'fmt'

)

func main(){

}

$ go run a.go

package main:a.go:4:2: illegal rune literal

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文