以下代码,使用了无符号uint
,做减法时会出现溢出
package main
import (
"fmt"
)
func main() {
var a uint = 1
var b uint = 2
fmt.Println(a - b) // 18446744073709551615
}
正确写法应该使用有符号int
package main
import (
"fmt"
)
func main() {
var a int = 1
var b int = 2
fmt.Println(a - b) // -1
}
溢出后,刚好和最大值一样了
package main
import (
"fmt"
"math"
)
func main() {
var a uint = math.MaxUint64
fmt.Println(a) // 18446744073709551615
}