溢出检查

golang里面如果 a + b 或者 a * b 发生溢出时,程序不会报错,会直接得到一个错误的结果,如果程序有大数计算需要做边界检查

 

 

//支持自增的溢出检查的方法

func IncrInt(x int) int {

   if x == math.MaxInt {

      panic("overflow")

   }

   return x + 1

}

 

//支持加法的溢出检查的方法

func AddInt(a, b int) int {

   if a > math.MaxInt-b {

      panic("overflow")

   }

   return a + b

}

 

//支持乘法的溢出检查的方法

func MultiplyInt(a, b int) int {

   if a == 0 || b == 0 {

      return 0

   }

 

   if (a*b)/a != b {

      panic("overflow")

   }

 

   return a * b

}

一个类型一种类型方法检查,但是有些朋友说类型这么多,为什么不写一个统一的泛型方法,因为在go语言中是不支持断言类型匹配的

func Foo[T int32 | int](n T) {

   switch v := n.(type) {

   case int:

   case int32:

      fmt.Println(v)

   }

}

上面这种写法是不能编译通过的。既然不能知道实际类型就不能用 math.MaxInt 的值,自然不能通用的去匹配。

 

 


上一篇: 自制游戏设计王者

下一篇: 无

在线交流