你知道Go语言的Rune吗?

开发 后端
由于rune可表示的范围更大,所以能处理一切字符,当然也包括中文字符。在平时计算中文字符,可用rune。当我们数据中有中文时,一定要注意rune的处理。

rune它是int32的别名(-2147483648~2147483647),相比于byte(-128~127),可表示的字符更多。

由于rune可表示的范围更大,所以能处理一切字符,当然也包括中文字符。在平时计算中文字符,可用rune。

当我们数据中有中文时,一定要注意rune的处理。

len()详解

len()获得的是 byte 字节的数量,一个中文占用3个字节

s := "Hello王"
sHello := "Hello"
sWang := "王"
//len()获得的是 byte 字节的数量
fmt.Println(len(s))
fmt.Println(len(sHello))
fmt.Println(len(sWang))

输出结果是:8 5 3

循环输出字符串

s := "Hello王"
for i := 0; i < len(s); i++ {
fmt.Printf("%c\n", s[i])
}

输出结果:

图片

我们发现英文可以正常输出,但是中文通过这种方式输出会乱码

循环输出中文字符串

我们可以通过for range循环,从字符串中拿出具体的字符

s := "Hello王"
for _, c := range s {
fmt.Printf("%c\n", c) //%c 字符
}

输出结果:

图片

字符串的修改

字符串修改是不能直接修改的,需要转成rune切片后再修改

s2 := "小白兔"
s3 := []rune(s2) //把字符串强制转成rune切片
s3[0] = '大' //注意 这里需要使用单引号的字符,而不是双引号的字符串
fmt.Println(string(s3)) //把rune类型的s3强转成字符串

输出结果:大白兔

字符和字符串的区别

c1 := "红"
c2 := '红'
fmt.Printf("c1的类型:%T c2的类型:%T \n", c1, c2)
c3 := "H"
c4 := 'H'
fmt.Printf("c3的类型:%T c4的类型:%T \n", c3, c4)

输出结果:

c1的类型:string c2的类型:int32 
c3的类型:string c4的类型:int32

总结:我们发现只要是双引号包裹的类型就是string,只要是单引号包裹的类型就是int32,也就是rune。和中英文无关。

知识点:rune的别名是int32

类型转换

n1 := 10
var f float64
f = float64(n1)
fmt.Printf("f的类型是:%T f的值是:%v\n", f,f)

输出结果:

f的类型是:float64 f的值是:10

总结

字符串的修改要转成rune切片,而不能像PHP一样直接修改。

本文转载自微信公众号「 程序员升级打怪之旅」,作者「王中阳Go」,可以通过以下二维码关注。转载本文请联系程序员升级打怪之旅公众号。

责任编辑:武晓燕 来源: 程序员升级打怪之旅
相关推荐

2021-11-10 15:37:49

Go源码指令

2024-08-19 00:00:02

2023-03-07 10:32:34

Go语言结构体

2024-09-02 00:30:41

Go语言场景

2024-10-09 08:54:31

2021-05-31 10:22:09

Go语言代码

2022-01-05 11:40:36

Go特性语言

2021-07-11 18:04:04

C语言

2020-08-06 09:03:44

Go语言获取文件代码

2020-05-15 14:34:16

C语言丹尼斯 · 里奇开发者

2023-01-31 09:02:24

JSVMVR

2022-06-01 07:10:43

递归字典极限

2023-12-29 08:42:46

高并发Go语言

2024-03-08 13:33:08

PG数据安全

2018-01-10 08:27:00

2010-11-23 10:21:53

跳槽

2022-09-22 14:55:31

前端JavaScripthis

2022-09-26 13:10:17

JavaScriptthis

2023-12-12 08:41:01

2021-10-08 21:00:52

数据弱引用对象
点赞
收藏

51CTO技术栈公众号