昨天在刷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类型。