Golang字元的編碼
Golang字元是按照 UTF-8
編碼的 Unicode
字符集, 英文字母為 1
byte,中文字為 3
byte。
Golang其實沒有Char類型
一般傳統的程式語言字元有 char
作為儲存類型,但是Golang沒有 char
類型,如果要儲存單個字元,則會使用 byte
或是 rune
等數據類型來做儲存。
字元應該要用什麼數據類型來做保存?
英文或數字的字元 :
因為英文或是數字會包含在ASCII表裡,對應的值為0~127,所以特別適合使用 byte 或是 uint8 類型來保存。
var c1 byte = 'a'
var c2 uint8 = '1'
中文字元 :
因為中文字元對應的Unicode值通常大於127,超過byte能儲存的範圍,所以會使用 rune 或是 uint32 類型來保存。
var c1 rune = '張'
var c2 int32 = '李'
我想印出字元
為什麼打印字元會出現奇怪的數字 ?
因為使用println印出的結果是對應此字元的Unicode碼,a
對應的Unicode值為97
,1
對應的Unicode值為49
package main
import (
"fmt"
)
func main() {
var c1 byte = 'a'
var c2 uint8 = '1'
fmt.Println(c1)
fmt.Println(c2)
}
輸出結果 :
97
49
如果我就是要印出原本的字元怎麼辦?
使用 Printf %c
做格式化輸出就能印出原始的字元了!
package main
import (
"fmt"
)
func main() {
var c1 int = '張'
fmt.Printf("%c\n", c1)
}
輸出結果 :
張
Golang的字元其實是整數
其實能直接將一個整數轉換成對應的字元 :
func main() {
var c1 int = 24278
fmt.Printf("%c\n", c1)
}
輸出結果 :
廖
字元其實是可以運算的 :
func main() {
var c1 int = 'a' + 'b' // 97 + 98 = 195
fmt.Println(c1)
}
輸出結果 :
195