如何从Go中溢出int转换中获得错误?

Chr*_*tin 1 int go

我正在寻找类似这样的整数转换函数:

func narrow(x int64) (int32, error) { ... }
Run Code Online (Sandbox Code Playgroud)

在这个例子中,该函数将返回((int32)(x), nil)如果x配合到int32,并且(nil, someError)如果它不.

似乎语言中内置了很多转换,但它们都默默地吞噬溢出,而不是提供一个确定的错误.我错过了什么吗?

Cer*_*món 5

转换不会报告溢出.

这是一个处理正数和负数的函数:

func narrow(x int64) (int32, error) {
   y := int32(x)
   if int64(y) != x {
      return 0, errors.New("overflow")
   }
   return y, nil
}
Run Code Online (Sandbox Code Playgroud)

操场的例子