在" 21世纪C"中,本·克莱门斯(Ben Klemens)描述了C如何自动将签名的数字转换为未签名的,例如,例如表达式。去共享同样的危险行为,还是去对其进行不同?
GO中没有隐含的转换。为了与两个不同类型的两个值进行比较或进行算术,您必须进行手册和明确的类型转换。
a := 3 // numerical constant 3 defaults to int
b := uint(2)
c := a < b // compiler error
d := a < int(b) // OK
go仅对所有操作使用显式类型转换。
。var a uint64
var b int64
a = 1
b = 1
if a == b {
fmt.Println("Equal")
}
此片段将导致错误:
tmp/sandbox428200464/main.go:13:无效操作:a == b(不匹配类型UINT64和INT64)
要进行比较,您必须明确地将变量施加到同一类型:
if int64(a) == b {...}
所以,绝对是,如果可以这样说,它是修复的。
摘要的游戏发现。