uint8和byte之间的隐式类型转换

时间:2018-04-17 02:58:04

标签: go type-conversion

如第55页的Go Go编程语言中所述:“将值从一种类型转换为另一种类型需要进行EXPLICIT转换”,即使它们都具有相同的基础类型。例如:

type myByte byte

func main() {
    var a byte
    var b myByte

    a = b       // Compile error: cannot use b (type myByte) as type byte in assignment
    a = byte(b) // OK
}

但是对于uint8byte,我很惊讶转换是隐含的:

func main() {
    var a byte
    var b uint8

    a = b // OK
    b = a // OK
}

为什么?

2 个答案:

答案 0 :(得分:6)

字节 uint8 的别名,并且在所有方面都相当于uint8。

来自GoDoc:

  

输入字节

     

byte是uint8的别名,在所有方面都等同于uint8。按照惯例,它用于区分字节值和8位无符号整数值。

     

输入字节字节//真的:输入byte = uint8(参见golang.org/issue/21601)

https://golang.org/pkg/builtin/#byte

答案 1 :(得分:2)

早些时候,在The Go Programming Language的第52页,"类型字节是uint8"的同义词。

  

The Go Programming Language Specification

     

Numeric types

uint8       the set of all unsigned  8-bit integers (0 to 255)

byte        alias for uint8