你会用Go语言的rune类型吗?

简介: rune它是int32的别名(-2147483648~2147483647),相比于byte(-128~127),可表示的字符更多。由于rune可表示的范围更大,所以能处理一切字符,当然也包括中文字符。在平时计算中文字符,可用rune。

rune它是int32的别名(-2147483648~2147483647),相比于byte(-128~127),可表示的字符更多。由于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])
}


输出结果:


微信图片_20221112143157.jpg


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


循环输出中文字符串


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


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


输出结果:


微信图片_20221112143201.jpg


字符串的修改


字符串修改是不能直接修改的,需要转成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一样直接修改。


公众号:程序员升级打怪之旅

微信号:wangzhongyang1993

相关文章
|
18天前
|
存储 Go 索引
go语言中数组和切片
go语言中数组和切片
27 7
|
18天前
|
Go 开发工具
百炼-千问模型通过openai接口构建assistant 等 go语言
由于阿里百炼平台通义千问大模型没有完善的go语言兼容openapi示例,并且官方答复assistant是不兼容openapi sdk的。 实际使用中发现是能够支持的,所以自己写了一个demo test示例,给大家做一个参考。
|
18天前
|
程序员 Go
go语言中结构体(Struct)
go语言中结构体(Struct)
93 71
|
17天前
|
存储 Go 索引
go语言中的数组(Array)
go语言中的数组(Array)
100 67
|
18天前
|
存储 Go
go语言中映射
go语言中映射
32 11
|
20天前
|
Go
go语言for遍历映射(map)
go语言for遍历映射(map)
30 12
|
19天前
|
Go 索引
go语言使用索引遍历
go语言使用索引遍历
27 9
|
19天前
|
Go 索引
go语言使用range关键字
go语言使用range关键字
25 7
|
19天前
|
Go 索引
go语言修改元素
go语言修改元素
26 6
|
10天前
|
Go 数据安全/隐私保护 UED
优化Go语言中的网络连接:设置代理超时参数
优化Go语言中的网络连接:设置代理超时参数