Golang中的字元


Posted by Henry on 2020-07-24

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值為971對應的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

#golang #GO #go語言







Related Posts

MTR04_0711

MTR04_0711

[Golang] slice 作為參數傳入 func 的注意事項

[Golang] slice 作為參數傳入 func 的注意事項

【Day 1】Docker 基本概念

【Day 1】Docker 基本概念


Comments