golang rune类型解析,与byte,string对比,以及应用

Golang中的rune类型是一个32位的整数类型(int32),它是用来表示Unicode码点的。rune类型的值可以是任何合法的Unicode码点,它通常用来处理字符串中的单个字符。

在Golang中,字符常量使用单引号来表示,例如 'a'。使用单引号表示的字符常量是一个rune类型的值。

可以使用内置的rune函数将字符串转换为rune类型的切片。例如:

Go 复制代码
str := "Hello, 世界"
runes := []rune(str)
fmt.Println(runes)

输出结果是

72 101 108 108 111 44 114 117 110 101 19990 30028

前面几位72,101...与ascii码H e l l o的值一一对应

其实unicode与ascii都是字符串对应的计算机码用的,Unicode是为了补充ascii的不足(毕竟ascii码不包含中文)

可以使用内置的len函数获取rune类型切片的长度,该长度表示字符串中的字符数量。例如:

Go 复制代码
str := "Hello, 世界"
runes := []rune(str)
fmt.Println(len(str),len(runes))

输出结果分别是12与8

Go 复制代码
str := "Hello, 世界"
for i := 0; i < 12; i++ {
    fmt.Printf("%c",str[i])
}
//输出结果Hello, ä¸ç

在输出中,%c格式化动词用于打印rune类型的值,将其表示为字符。

说明len(str)中文跟英文,所占的长度是不一样的,中文占3个字节

而len(runes)返回的是字符串的个数

可以使用for循环遍历rune类型切片,以便访问字符串中的每个字符。例如:

Go 复制代码
for _, r := range runes {
    fmt.Printf("%c", r)
}

输出结果为:Hello,世界

rune类型还可以转换成string类型,例如:

Go 复制代码
var a rune = 'a'
fmt.Println(string(a))
var b []rune = []rune{'a','b'}
fmt.Println(string(b))

需要注意的是,因为rune类型是一个整数类型,所以可以进行算术和逻辑操作。

Go 复制代码
package main

import "fmt"

func main() {
	// 算术操作
	r1 := 'A'
	r2 := 'a'
	sum := r1 + r2
	diff := r1 - r2
	fmt.Printf("Sum: %c\n", sum)
	fmt.Printf("Difference: %c\n", diff)

	// 逻辑操作
	r3 := 'X'
	r4 := 'Y'
	logicalAnd := r3 & r4
	logicalOr := r3 | r4
	logicalXor := r3 ^ r4
	fmt.Printf("Logical AND: %c\n", logicalAnd)
	fmt.Printf("Logical OR: %c\n", logicalOr)
	fmt.Printf("Logical XOR: %c\n", logicalXor)
}
 

输出值都是乱码、或许在需要对称加密场景下可以使用?

rune类型与Byte类型对比:

Go 复制代码
package main

import "fmt"

func main() {
	var a rune = '林'
    fmt.Println(a)//26519
    var b rune = 'a'
    fmt.Println(b)//97
    var c byte = 'a'
    fmt.Println(c)//97
    //var d byte = '林' //因为超出了值域会报错,byte类型是0-255
    //fmt.Println(d)

}
 

总结:rune 用于处理单个字符,string 用于处理字符串,byte 用于处理单个字节。

相关推荐
Escalating_xu11 分钟前
C++可变参数模板与引用折叠精讲
开发语言·c++
wuyk55516 分钟前
59.嵌入式C语言高级宏定义实战:多行宏、字符串化与符号拼接
c语言·开发语言·stm32·单片机·嵌入式硬件·物联网·51单片机
神奇小汤圆20 分钟前
SpringBoot + 虚拟线程,简直鸟枪换大炮~
后端
云泽80823 分钟前
Visual Studio 2026 新手保姆级教程:环境搭建、界面优化与编译器配置详解
开发语言·c++·c·开发工具·visual studio
掘金一周38 分钟前
想问问掘友们:AI 时代,资深开发的核心价值到底在哪里?| 沸点周刊 7.23
前端·人工智能·后端
2zcode1 小时前
基于MATLAB深度学习的乳腺钼靶影像乳腺癌智能诊断系统设计与实现
开发语言·深度学习·matlab·乳腺癌
MoonBit月兔1 小时前
错过大赛报名?MoonBit 开源大赛- 8 月黑客松正式开启
开发语言·ai-native·moonbit
weixin_538601971 小时前
智能体测开Day31
开发语言·python
geovindu2 小时前
java: Facade Pattern
java·开发语言·后端·外观模式·结构型模式
listening7772 小时前
HarmonyOS 6.1 元服务深度优化:从“秒开”到“常驻”的极致体验
java·开发语言·spring