Go 会修复或共享 C 的危险隐式 -> 无符号转换吗?



在" 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 {...}

所以,绝对,如果可以这样说,它是修复的。

摘要的游戏发现。

最新更新