go中的rune类型

go语言中 ,rune其实是一种int32的数据类型的别名。

Go 复制代码
// rune is an alias for int32 and is equivalent to int32 in all ways. It is
// used, by convention, to distinguish character values from integer values.
type rune = int32

rune通常用于处理字符串中的单个字符,通常来区分整数值和字符值。

看下面的例子:

Go 复制代码
// 单元测试
func TestRune1(t *testing.T) {
	fmt.Println("The Shy:", len("The Shy"))
	fmt.Println("英雄联盟:", len("英雄联盟"))
}

结果:
=== RUN   TestRune1
The Shy: 7
英雄联盟: 12
--- PASS: TestRune1 (0.00s)
PASS

看上面的结果The Shy: 7,这个好理解,英文的字符串的长度为7,英雄联盟: 12。为什么英雄联盟这个长度是12呢?

这是因为go语言的编码是按照UTF-8编码规则来的。UTF-8是一套以 8 位为一个编码单位的可变长编码。汉字的16进制值得区间在UTF-8的第三区段,那么在go的编码下会占用三个字符。所以在我们对字符串进去处理的时候只需要将字符串通过range去遍历,会按照rune为单位自动去处理。

Go 复制代码
func TestRune1(t *testing.T) {
	fmt.Println("The Shy:", len("The Shy"))
	fmt.Println("英雄联盟:", len("英雄联盟"))

	fmt.Println("-------------------")

	s := "英雄联盟"
	for k, v := range s {
		fmt.Printf("k:%v->v:%v->realValue:%c,", k, v, v)
		fmt.Println()
	}
	fmt.Println(len(s))
}

// 结果:
=== RUN   TestRune1
The Shy: 7
英雄联盟: 12
-------------------
k:0->v:33521->realValue:英,
k:3->v:38596->realValue:雄,
k:6->v:32852->realValue:联,
k:9->v:30431->realValue:盟,
12
--- PASS: TestRune1 (0.00s)
PASS

可以看到,rune已经将字符串中每个字符转换为Unicode码点。

结果打印:打印出字符在字符串中的索引位置 k 和对应的Unicode码点 v 。

那码点怎么转化为汉字呢?

在Go语言中,可以使用 %c

复制代码
fmt.Printf("k:%v->v:%v->realValue:%c,", k, v, v)

将Unicode码点转换为对应的字符(汉字)。其中,%c 是一个占位符,表示将一个Unicode码点格式化为对应的字符。

小结:

rune其实就是int32的数据类型,对于汉字等,将汉字转化为Unicode码点。

可以通过%c来获取码点对应的值。

相关推荐
源代码•宸23 分钟前
Leetcode—509. 斐波那契数【简单】
经验分享·算法·leetcode·面试·golang·记忆化搜索·动规
我不是8神4 小时前
字节跳动 Eino 框架(Golang+AI)知识点全面总结
开发语言·人工智能·golang
zhuhezhang4 小时前
go wails doctor提示Required dependencies missing: libwebkit
golang·wails·libwebkit
2501_941805317 小时前
使用Python和Go构建高性能分布式任务调度系统的实践分享
分布式·python·golang
有谁看见我的剑了?12 小时前
使用 go get github.com/go-sql-driver/mysql 驱动失败
golang
无心水12 小时前
2、Go语言源码文件组织与命令源码文件实战指南
开发语言·人工智能·后端·机器学习·golang·go·gopath
阿里云云原生12 小时前
阿里云可观测联合 Datadog 发布 OpenTelemetry Go 自动插桩工具
阿里云·golang·云计算·可观测
张丶大帅12 小时前
【走进Golang】
开发语言·后端·golang
无心水13 小时前
8、吃透Go语言container包:链表(List)与环(Ring)的核心原理+避坑指南
java·开发语言·链表·微服务·架构·golang·list
源代码•宸13 小时前
Golang原理剖析(Go语言垃圾回收GC)
经验分享·后端·算法·面试·golang·stw·三色标记