golang将math.MinInt64字符串转换为int失败

时间:2016-01-09 23:13:42

标签: go

给出以下功能:

func convertValue(contents string) (int, error) {
    return strconv.Atoi(contents)
}

当我运行以下测试时

var convertValues = []struct {
    contents string
    value int
}{
    {"9223372036854775807", math.MaxInt64},
    {"−9223372036854775808", math.MinInt64},
}

func TestConvertValue(t *testing.T) {
    for _, values := range convertValues {
        value, err := convertValue(values.contents)
        if err != nil {
            t.Error("Expecting", values.value, "but got error", err.Error())
        }

        if value != values.value {
            t.Error("Expecting ", values.value, ", but got ", value)
        }
    }
}

适用于MaxInt64,但不适用于MinInt64。我在MacBookPro上运行它,所以它运行在64位。我用以下

对此进行了双重检查
func TestIntSize(t *testing.T) {
    const PtrSize = 32 << uintptr(^uintptr(0)>>63)
    fmt.Println(runtime.GOOS, runtime.GOARCH)
    fmt.Println(strconv.IntSize, PtrSize)
}

然后它返回

darwin amd64
64 64

我做错了什么?

1 个答案:

答案 0 :(得分:1)

https://play.golang.org/p/FtytYJkHSc

切换到strconv.ParseInt并明确使用int64作为类型似乎有所帮助。我的MinInt64字符串中的短划线字符也存在问题,可能只是在我的最后,但值得检查并确保它是基本的ASCII字符而不是某种Unicode短划线。