Go语言的字符有两种:uint8类型和rune类型。
1.字符类型
Go语言的字符有两种:
uint8 类型,代表了 ASCII 码的一个字符。 byte 是uint8类型的别名,Go语言中,string类型中的每个字符默认为byte类型。
package main
import (
"fmt"
)
func main() {
// 输出字母A
var ch1 byte = 65
var ch2 byte = '\x41'
//输出字母 a
var ch3 byte = 97
var ch4 byte = '\x61'
fmt.Printf("%c,%T\n", ch1, ch1)
fmt.Printf("%c,%T\n", ch2, ch2)
fmt.Printf("%c,%T\n", ch3, ch3)
fmt.Printf("%c,%T\n", ch4, ch4)
}
运行结果:
A,uint8
A,uint8
a,uint8
a,uint8
Go语言支持 Unicode(UTF-8),因此字符同样称为 Unicode 代码点或者 runes,并在内存中使用 int32 来表示。 在文档中,一般使用格式 U+hhhh 来表示,其中 h 表示一个 16 进制数。 在书写 Unicode 字符时,需要在 16 进制数之前加上前缀\u或者\U。 如果需要使用到 4 字节,则使用\u前缀,如果需要使用到 8 个字节,则使用\U前缀。
package main
import (
"fmt"
)
func main() {
var ch rune = '\u0041' //A
var ch2 rune = '\u4E2D' //中
var ch3 rune = '\U00004E2D'
fmt.Printf("%d - %d - %d\n", ch, ch2, ch3) // integer
fmt.Printf("%c - %c - %c\n", ch, ch2, ch3) // character
fmt.Printf("%X - %X - %X\n", ch, ch2, ch3) // UTF-8 bytes
fmt.Printf("%U - %U - %U\n", ch, ch2, ch3) // UTF-8 code point
fmt.Printf("%T - %T - %T", ch, ch2, ch3) // int32 type
}
运行结果:
65 - 20013 - 20013
A - 中 - 中
41 - 4E2D - 4E2D
U+0041 - U+4E2D - U+4E2D
int32 - int32 - int32
2.unicode内置函数
Unicode 包中内置了一些用于测试字符的函数,这些函数的返回值都是一个布尔值,如下所示(其中 ch 代表字符):
package main
import (
"fmt"
"unicode"
)
func main() {
var ch rune = '\u0041' //A
var ch2 rune = '\u4E2D' //中
var ch3 rune = '\u0031' //数字 1
fmt.Printf("%c,%v\n", ch, unicode.IsLetter(ch))
fmt.Printf("%c,%v\n", ch2, unicode.IsLetter(ch2))
fmt.Printf("%c,%v\n", ch2, unicode.IsDigit(ch2))
fmt.Printf("%c,%v\n", ch3, unicode.IsDigit(ch3))
}
运行结果:
A,true
中,true
中,false
1,true