1.字符串
字符串在Go語言中以原生數據類型出現,使用字符串就像使用其餘原生數據類型(int、bool、 float3二、foat64等)同樣。ui
字符串的值爲雙引號中的內容,能夠在Go語言的源碼中直接添加非ASCⅡ碼字符編碼
Go語言的字符串常見轉義符包含回車、換行、單雙引號、製表符等,以下所示spa
轉移符 含義code
\r 回車符(返回行首) \n 換行符(直接跳到下一行的同列位置) \t 製表符 \' 單引號 \" 雙引號 \\ 反斜槓
2.字符串實現基於UTF-8編碼blog
go 語言裏的字符串的內部實現使用UTF8編碼. 經過rune類型,能夠方便地對每一個UTF-8字符進行訪問。ip
固然,Go語言也支持按傳統的ASCII碼方式進行逐字符訪問。ci
3.字符unicode
字符串中的每個元素叫作「字符」,在遍歷或者單個獲取字符非元素時能夠得到字符。字符串
Go語言的字符有如下兩種:源碼
一種是uint8類型,或者叫byte型,表明了ASCII碼的一個字符。 另外一種是rune類型,表明一個UTF-8字符。當須要處理中文、日文或者其餘複合字符時, 則須要用到rune類型。rune類型實際是一個int32。
使用 fmt.Printf中的「%T」動詞能夠輸出變量的實際類型,使用這個方法能夠查看byte和rune的原本類型,代碼以下:
var a byte = 'a' fmt.Printf("%d %T\n", a, a) var b rune='你' fmt.Printf("%d %T\n", b, b) 輸出以下 97 uint8 20320 int32
4.UTF-8和 Unicode有何區別?
Unicode是字符集。ASCⅡ也是一種字符集。
字符集爲每一個字符分配一個惟一的ID,咱們使用到的全部字符在 Unicode字符集中都有惟一的一個ID對應,
例如上面例子中的a在 Unicode與ASCII中的編碼都是97。
「你「在 Unicode中的編碼爲20320,可是在不一樣國家的字符集中,「你」的ID會不一樣。
而不管任何狀況下, Unicode中的字符的ID都是不會變化的。
UTF-8是編碼規則,將 Unicode中字符的ID以某種方式進行編碼。UTF-8的是一種
變長編碼規則,從1到4個字節不等。
5.計算字符串長度
tip := "genji is a ninja" fmt.Println(len(tip)) tip2 := "認真" fmt.Println(len(tip2)) 結果: 16 6
len 表示字符串的ASCII 字符個數或字節長度
因此:
ASCII 字符串長度使用len() 長度
Unicode 字符串長度使用utf8.RuneCountInString()
5.字符串遍歷
1.遍歷每個 ASCII 字符
直接使用for
2.按Unicode 字符遍歷字符串
使用 range
str := "快樂 everyday" for _, s := range str{ fmt.Printf("unicode: %c %d\n", s,s) } for i:=0;i<len(str) ;i++ { fmt.Printf("ascii: %c %d\n", str[i], str[i]) }
結果以下:
unicode: 快 24555
unicode: 樂 20048
unicode: 32
unicode: e 101
unicode: v 118
unicode: e 101
unicode: r 114
unicode: y 121
unicode: d 100
unicode: a 97
unicode: y 121
ascii: å 229
ascii: ¿ 191
ascii: « 171
ascii: ä 228
ascii: ¹ 185
ascii: 144
ascii: 32
ascii: e 101
ascii: v 118
ascii: e 101
ascii: r 114
ascii: y 121
ascii: d 100
ascii: a 97
ascii: y 121
6.字符串格式化