Go语言中的byte和rune区别、对比

时间:2022-07-23
本文章向大家介绍Go语言中的byte和rune区别、对比,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

Go语言中byterune实质上就是uint8int32类型。byte用来强调数据是raw data,而不是数字;而rune用来表示Unicodecode point。参考规范

uint8       the set of all unsigned  8-bit integers (0 to 255)
int32       the set of all signed 32-bit integers (-2147483648 to 2147483647)

byte        alias for uint8
rune        alias for int32

可以通过下面程序验证:

package main

import "fmt"

func byteSlice(b []byte) []byte {
    return b
}

func runeSlice(r []rune) []rune {
    return r
}

func main() {
    b := []byte{0, 1}
    u8 := []uint8{2, 3}
    fmt.Printf("%T %T n", b, u8)
    fmt.Println(byteSlice(b))
    fmt.Println(byteSlice(u8))

    r := []rune{4, 5}
    i32 := []int32{6, 7}
    fmt.Printf("%T %T n", r, i32)
    fmt.Println(runeSlice(r))
    fmt.Println(runeSlice(i32))
}

执行结果如下:

[]uint8 []uint8
[0 1]
[2 3]
[]int32 []int32
[4 5]
[6 7]
package main

import (
    "fmt"
)

func main() {
    var indexRuneTests = []struct {
        s    string
        rune rune
        out  int
    }{
        //string用反引号能换行, 但不支持转义, rune是一个uint32,即一个unicode字符
        {`asn
        df`, 'A', 2},
        //用双引号不能换行, 但支持转义如"nt..",  rune是一个uint32,即一个unicode字符
        {"some_textn=some_value", '=', 9},
        {"☺a", '☺', 3},
        {"a☻☺b", '☺', 4},
    }

    fmt.Println("Hello, playground",indexRuneTests)
}
Hello, playground [{asn
        df 65 2} {some_text
=some_value 61 9} {☺a 9786 3} {a☻☺b 9786 4}]

参考资料: Difference between []uint8 && []byte (Golang Slices)