golang 把字符類型單獨分離出來, 而且使用了不一樣的語法:程序員
var char = '這'
而用 fmt.Printf("%T", char) 查看其類型, 居然是 int32 這讓人奇怪, 一般字符組成了字符串, 字符串若是隻有一個字符長度的話, 應當就是字符. 但 golang 的作法改變了這種一般的觀點:golang
字符是數字類型, 若是要合併一個字符到字符串中, 該怎麼辦呢?函數
str := string(char)
golang 預約義了 rune, byte 兩種和字符有關的類型,但在顯示的時候, 卻改了名字:學習
var x byte fmt.Printf("x is %T", x) // x is int8 var y rune fmt.Printf("y is %T", y) // y is int32
這彷佛沒有必要定義這兩種類型, 由於 golang 本身的內置函數根本就忽略了它.編碼
另外 golang 和字符串有關的類型也比較混亂, 有 string, []byte, []rune. 和 string 有關的 strings 模塊的輸入數據類型大部分是 []string. 而由此引起的數據流就更加混亂, 讀出的字符串有各類格式.code
不過 golang 提供了內置函數對這些數據類型進行相互轉換:圖片
var str = "這裏輸入代碼" var chars = []rune(str) var bytes = []byte(str) // 這裏就亂了, 由於 unicode 字符被 asc 編碼了
我想, golang 搞了這麼多類型來處理字符串是基於效率的考慮:unicode
總之, 學習 golang 的字符串, 就要明白, 傳遞一個大字符串, 最好用引用類型, 而處理一個小字符串, 使用切片就會變得繁瑣.字符串
如何在編碼效率和執行效率之間取得平衡, 就由程序員本身選擇吧.string