如第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
}
但是对于uint8
和byte
,我很惊讶转换是隐含的:
func main() {
var a byte
var b uint8
a = b // OK
b = a // OK
}
为什么?
答案 0 :(得分:6)
字节是 uint8 的别名,并且在所有方面都相当于uint8。
来自GoDoc:
输入字节
byte是uint8的别名,在所有方面都等同于uint8。按照惯例,它用于区分字节值和8位无符号整数值。
输入字节字节//真的:输入byte = uint8(参见golang.org/issue/21601)
答案 1 :(得分:2)
早些时候,在The Go Programming Language的第52页,"类型字节是uint8"的同义词。
The Go Programming Language Specification
uint8 the set of all unsigned 8-bit integers (0 to 255) byte alias for uint8