golang中的byte和rune

func main() {
    a := []byte("Hello 世界")
    count := 0
    for _, v := range a {
        if v == ' ' {
            count++
        }
    }
    fmt.Println(count)
}

这个demo是正确输出结果1的,但是我不理解的是 if v == ' ' 这一行。v是个byte类型而' '是个rune,二者怎么能直接比较呢?

阅读 2.8k
3 个回答

rune 就是 int32byte 就是 int8

整数类型在编译期间有隐式转换。

https://golang.org/ref/spec#C...
没有指定类型的数值常量其类型由上下文决定

func fn1(x int) int { return x + 1}
func fn2(x uint8) uint8 { return x}

fn1(' ')
fn2(' ')

byte,占用1个字节,即8 个比特位,它和 uint8 类型本质上没有区别,它表示的是 ACSII 表中的一个字符

变量 a 里的空格ASCII是 32,而 ' ' 的ASCII也是 32,所以是相等的,你可以打印一下 byte 类型的空字符串和 ' '看下就知道了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题