byte ,只占用 1 个字节,即 8 位,其别名为 uint8 ,表示的是 ASCII 码表中的一个字符。下面的例子分别用 byte 和 uint8 定义
byte ,只占用 1
个字节,即 8
位,其别名为 uint8
,表示的是 ASCII 码表中的一个字符。下面的例子分别用 byte
和 uint8
定义了变量 x
和 y
。
package main
import "fmt"
func main() {
var x byte = 65
var y uint8 = 65
fmt.Printf("x = %c\n", x) // x = A
fmt.Printf("y = %c\n", y) // y = A
}
在 ASCII 码表中,ASCII 码值 65
所对应的字符为 A
。所以上面的程序运行后都会输出字符 A
。当然,你也可以直接写成下面的形式,结果是一样的。
var x byte = 'A'
var y uint8 = 'A'
rune ,占用 4
个字节,即 32
位,其别名为 uint32
,表示的是一个 Unicode
字符。
package main
import (
"fmt"
"unsafe"
)
func main() {
var x byte = 65
fmt.Printf("x = %c\n", x)
fmt.Printf("x 占用 %d 个字节\n", unsafe.Sizeof(x))
var y rune = 'A'
fmt.Printf("y = %c\n", y)
fmt.Printf("y 占用 %d 个字节\n", unsafe.Sizeof(y))
}
该程序运行后输出如下:
x = A
x 占用 1 个字节
y = A
y 占用 4 个字节
由此我们知道, byte 类型只能表示
var y rune = '我'
这里也许你不会注意到一个问题,那就是上面定义使用的都是 单引号
。在 Go 中,单引号和双引号是不同的, 单引号
只是用来表示 字符
,而 双引号
表示 字符串
,所以平时在使用的时候一定要注意定义的是字符还是字符串。
参考文献:
[1] Alan A. A. Donovan; Brian W. Kernighan, Go 程序设计语言, Translated by 李道兵, 高博, 庞向才, 金鑫鑫 and 林齐斌, 机械工业出版社, 2017.