Check for int/int64/int32 integer overflow in Golang arithmetic.
go get github.com/JohnCGriffin/overflow package main import "fmt" import "math" import "github.com/JohnCGriffin/overflow" func main() { addend := math.MaxInt64 - 5 for i := 0; i < 10; i++ { sum, ok := overflow.Add(addend, i) fmt.Printf("%v+%v -> (%v,%v)\n", addend, i, sum, ok) } } yields the output
9223372036854775802+0 -> (9223372036854775802,true) 9223372036854775802+1 -> (9223372036854775803,true) 9223372036854775802+2 -> (9223372036854775804,true) 9223372036854775802+3 -> (9223372036854775805,true) 9223372036854775802+4 -> (9223372036854775806,true) 9223372036854775802+5 -> (9223372036854775807,true) 9223372036854775802+6 -> (0,false) 9223372036854775802+7 -> (0,false) 9223372036854775802+8 -> (0,false) 9223372036854775802+9 -> (0,false) For int, int64, and int32 types, provide Add, Add32, Add64, Sub, Sub32, Sub64, etc.
Unsigned types not covered at the moment, but such additions are welcome.
There's a good case to be made that a panic is an unidiomatic but proper response. Iff you believe that there's no valid way to continue your program after math goes wayward, you can use the easier Addp, Mulp, Subp, and Divp versions which return the normal result or panic.