golang的rune和byte

336 阅读1分钟

昨天在刷LeetCode用Golang编写代码的时候,编译出现了一个报错,原图没有截,大概意思就是说,在unicode.IsUpper()这个函数中使用的rune类型,而不能使用byte类型。接着就进行了一系列查资料和代码测试的流程,后边就震惊的得出结论——golang没有char类型,rune相当于int32,byte相当于uint8。

先贴测试代码

// 测试string遍历的字符类型
package main

import (
	"fmt"
	"reflect"
	"unicode"
)

func main() {
	s := "Abcde"
	for _, v := range s {
		fmt.Println(unicode.IsUpper(v))
		fmt.Println(reflect.TypeOf(v))
	}
	fmt.Println(unicode.IsUpper(int32(s[0])))
	fmt.Println(reflect.TypeOf(s[0]))
	fmt.Printf("%d", s[0])
}

这里主要采用golang的反射机制,调用reflect.TypeOf函数分别查看for ... range ...和直接调用s[0]的区别,最后发现for range的是rune类型,s[0]是byte类型,并反射显示rune是int32类型,byte是uint8类型。