Golang是使用unicode,所以前面我們的例子,
函數,物件,方法,變數都大量採用中文方式來表示.
讓程式更生動.
今天來介紹一下unicode的處理.
來看下面的例子:
// hello81
package main
import (
"fmt"
)
func main() {
str := "能解此愁,唯有杜康!"
fmt.Printf("string: %s\n", str)
fmt.Println("String length:", len([]rune(str)))
fmt.Println(" Bytes length:", len(str))
fmt.Println("------------------------------------")
fmt.Println("cnt index rune char bytes")
fmt.Println("------------------------------------")
cnt := 0
for index, char := range str {
cnt++
fmt.Printf("%-2d %-2d %U %2c %X\n",
cnt, index, char, char, []byte(string(char)))
}
}
執行結果:
./hello81
string: 能解此愁,唯有杜康!
String length: 10
Bytes length: 26
------------------------------------
cnt index rune char bytes
------------------------------------
1 0 U+80FD 能 E883BD
2 3 U+89E3 解 E8A7A3
3 6 U+6B64 此 E6ADA4
4 9 U+6101 愁 E68481
5 12 U+002C , 2C
6 13 U+552F 唯 E594AF
7 16 U+6709 有 E69C89
8 19 U+675C 杜 E69D9C
9 22 U+5EB7 康 E5BAB7
10 25 U+0021 ! 21
解說:
在Golang中引進新的名詞rune,Unicode字串,實際上就是rune組成的
array.
所以上面的句子,連標點符號一共10個字.
用len()查,會是bytes,標點符號只用1個byte,
中文字用3個bytes,一共
1x2 + 3x8 = 26
要計算多少字,就要用 len([]rune(str))) 這樣的方式才能得到正確值.
接著逐一把str裡的內容,顯示出來,可以好好觀察.
cnt 是為了方便大家計算第幾個字,顧及到一般習慣,
所以是從1起算.
可以觀察到index 是0到25, 剛好26 bytes.
也可以看到每個中文字3個bytes,與標點符號1個byte.