JohnCGriffin/overflow
GitHub: JohnCGriffin/overflow
用于检测 Go 语言中 int 系列有符号整数类型在加减乘除运算中是否发生溢出的轻量级库。
Stars: 47 | Forks: 14
[](https://travis-ci.org/JohnCGriffin/overflow)
# overflow
检查 Golang 算术运算中 int/int8/int16/int64/int32 整数是否溢出。
### 安装
```
go get github.com/johncgriffin/overflow
```
请注意,由于 Go 没有模板类型,大部分重复代码是由 overflow_template.sh
生成的。如果你必须修改某个
算法,请在其中进行修改,然后通过以下命令重新生成 Go 代码:
```
go generate
```
### 概要
```
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)
}
}
```
产生输出
```
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)
```
对于 int、int64 和 int32 类型,提供了 Add、Add32、Add64、Sub、Sub32、Sub64 等。
目前暂未涵盖无符号类型,但欢迎添加此类扩展。
### 保持冷静并 panic
有充分的理由认为,panic 虽然不符合惯例,但却是一种正确的响应方式。如果你确信在数学计算出现异常后,程序没有任何合理的方式继续运行,你可以使用更便捷的 Addp、Mulp、Subp 和 Divp 版本,它们会返回正常结果或者直接 panic。
MIT 许可证
版权所有 (c) 2017 John C. Griffin,
特此免费授予任何获得本软件及相关文档文件(统称“软件”)副本的人,不受限制地处理本软件,
包括但不限于使用、复制、修改、合并、发布、分发、再授权和/或销售本软件副本的权利,以及允许获得本软件的人根据以下条件这样做:
上述版权声明和本许可声明应包含在本软件的所有副本或主要部分中。
本软件“按原样”提供,不提供任何形式的明示或暗示的保证,包括但不限于适销性、
特定用途的适用性和非侵权性的保证。在任何情况下,作者或版权持有人均不对任何索赔、
损害或其他责任负责,无论是在合同诉讼、侵权行为或其他方面,因使用本软件或与本软件的使用有关而引起的或与之相关的任何索赔、损害或其他责任。
标签:Cutter, EVTX分析, Go, Ruby工具, SOC Prime, 开发工具, 数据类型处理, 日志审计, 算术溢出检查