认识Golang的字符(char)类型

Golang 没有char类型,但可以通过byte、rune、string类型实现类似功能。本文详细说明几种类型之间的差异。

Go字符类型

  • byte

byte用于表示ascii字符。它是uint8的别名,因此8位或1byte能表示0~255范围的所有ascii字符。

  • rune

表示包括所有已存在的UNICODE字符。rune是int32的别名,可以表示所有UNICODE字符,大小是4个字节。

  • string

长度为1的字符串也可用于隐式表示字符。一个字符串字符大小取决于该字符的编码,对于utf-8编码,它将介于1-4个字节之间。

声明byte、rune类型变量使用单引号,声明byte类型必须指定类型,没有指定类型缺省为rune类型。声明string变量,使用双引号或反引号。双引号字符串接受转义字符,而反引号字符串是原始文本字符串,不接受任何形式的转义。

示例

下面程序显示字节类型字符’a’,rune类型RMB符号以及字符串类型字符"µ",另外还显示转义符和反引号字符串字符:

func main() {
	// 如果不指定byte类型,则为rune类型
	var b byte = 'a'

	fmt.Println("Printing Byte:")
	// 打印大小,类型以及字符值
	fmt.Printf("Size: %d\nType: %s\nCharacter: %c\n", unsafe.Sizeof(b), reflect.TypeOf(b), b)

	r := '¥'

	fmt.Println("\nPrinting Rune:")
	// 打印大小,类型以及字符值
	fmt.Printf("Size: %d\nType: %s\nUnicode CodePoint: %U\nCharacter: %c\n", unsafe.Sizeof(r), reflect.TypeOf(r), r, r)

	s := "µ"
	fmt.Println("\nPrinting String:")
	fmt.Printf("Size: %d\nType: %s\nCharacter: %s\n", unsafe.Sizeof(s), reflect.TypeOf(s), s)

	s = "\\"
	fmt.Println("\nPrinting String:")
	fmt.Printf("Size: %d\nType: %s\nCharacter: %s\n", unsafe.Sizeof(s), reflect.TypeOf(s), s)

	s = `s`
	fmt.Println("\nPrinting String:")
	fmt.Printf("Size: %d\nType: %s\nCharacter: %s\n", unsafe.Sizeof(s), reflect.TypeOf(s), s)
}

输出结果:

Size: 1                  
Type: uint8              
Character: a             
                         
Printing Rune:           
Size: 4                  
Type: int32              
Unicode CodePoint: U+00A3
Character: ¥             
                         
Printing String:         
Size: 16                 
Type: string             
Character: µ             
                         
Printing String:         
Size: 16                 
Type: string             
Character: \             
                         
Printing String:         
Size: 16                 
Type: string             
Character: s             

声明字节类型存储非ascii字符会引发编译错误,赋值为285则编译器报错信息:

constant 285 overflows byte

单引号仅能初始化byte,rune类型变量,如果单引号内多余一个字符,编译器也会报错:

invalid character literal (more than one character)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值