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

由于rune可表示的范圍更大,所以能處理一切字符,當(dāng)然也包括中文字符。在平時(shí)計(jì)算中文字符,可用rune。
當(dāng)我們數(shù)據(jù)中有中文時(shí),一定要注意rune的處理。
len()詳解
len()獲得的是 byte 字節(jié)的數(shù)量,一個(gè)中文占用3個(gè)字節(jié)
s := "Hello王"
sHello := "Hello"
sWang := "王"
//len()獲得的是 byte 字節(jié)的數(shù)量
fmt.Println(len(s))
fmt.Println(len(sHello))
fmt.Println(len(sWang))
輸出結(jié)果是:8 5 3
循環(huán)輸出字符串
s := "Hello王"
for i := 0; i < len(s); i++ {
fmt.Printf("%c\n", s[i])
}
輸出結(jié)果:
我們發(fā)現(xiàn)英文可以正常輸出,但是中文通過(guò)這種方式輸出會(huì)亂碼
循環(huán)輸出中文字符串
我們可以通過(guò)for range循環(huán),從字符串中拿出具體的字符
s := "Hello王"
for _, c := range s {
fmt.Printf("%c\n", c) //%c 字符
}
輸出結(jié)果:
字符串的修改
字符串修改是不能直接修改的,需要轉(zhuǎn)成rune切片后再修改
s2 := "小白兔"
s3 := []rune(s2) //把字符串強(qiáng)制轉(zhuǎn)成rune切片
s3[0] = '大' //注意 這里需要使用單引號(hào)的字符,而不是雙引號(hào)的字符串
fmt.Println(string(s3)) //把rune類(lèi)型的s3強(qiáng)轉(zhuǎn)成字符串
輸出結(jié)果:大白兔
字符和字符串的區(qū)別
c1 := "紅"
c2 := '紅'
fmt.Printf("c1的類(lèi)型:%T c2的類(lèi)型:%T \n", c1, c2)
c3 := "H"
c4 := 'H'
fmt.Printf("c3的類(lèi)型:%T c4的類(lèi)型:%T \n", c3, c4)
輸出結(jié)果:
c1的類(lèi)型:string c2的類(lèi)型:int32
c3的類(lèi)型:string c4的類(lèi)型:int32
總結(jié):我們發(fā)現(xiàn)只要是雙引號(hào)包裹的類(lèi)型就是string,只要是單引號(hào)包裹的類(lèi)型就是int32,也就是rune。和中英文無(wú)關(guān)。
知識(shí)點(diǎn):rune的別名是int32
類(lèi)型轉(zhuǎn)換
n1 := 10
var f float64
f = float64(n1)
fmt.Printf("f的類(lèi)型是:%T f的值是:%v\n", f,f)
輸出結(jié)果:
f的類(lèi)型是:float64 f的值是:10
總結(jié)
字符串的修改要轉(zhuǎn)成rune切片,而不能像PHP一樣直接修改。
本文轉(zhuǎn)載自微信公眾號(hào)「 程序員升級(jí)打怪之旅」,作者「王中陽(yáng)Go」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系程序員升級(jí)打怪之旅公眾號(hào)。
網(wǎng)站欄目:你知道Go語(yǔ)言的Rune嗎?
分享URL:http://www.5511xx.com/article/coojssg.html


咨詢
建站咨詢
