在看golang的源碼包經(jīng)澄掷牛看到rune,一直和byte搞混淆允青。先來(lái)看看rune與byte區(qū)別:
- byte 等同于int8遣耍,常用于處理ascii字符
- rune等等同于int32,常用來(lái)處理unicode或者utf-8字符
golang中的string底層由[]byte組成
golang中默認(rèn)編碼是utf-8
易錯(cuò)點(diǎn)
1焚辅、在golang中的單引號(hào)表示字符凄贩,雙引號(hào)表示的字符串誓军,用單引號(hào)表示的字符,打印的是utf-8轉(zhuǎn)換后的數(shù)值
a := 'A'
fmt.Println(a)
65
2疲扎、在golang里谭企,中文字符在unicode下占2個(gè)字節(jié),在utf-8下占3個(gè)字節(jié)
a := "你好评肆,china"
fmt.Println(len(a))
fmt.Println(len([]rune(a)))
14
8
如果想得到字符串真正長(zhǎng)度(一個(gè)中文字符一個(gè)長(zhǎng)度)债查,需轉(zhuǎn)換為rune。