猿问

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

给定以下功能:


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

我究竟做错了什么?


30秒到达战场
浏览 239回答 1
1回答

慕姐4208626

https://play.golang.org/p/FtytYJkHSc切换到 strconv.ParseInt 并明确使用 int64 作为类型似乎有所帮助。我的 MinInt64 字符串中的破折号也有问题,这可能就在我的最后,但值得检查并确保它是基本的 ASCII 字符,而不是某种 Unicode 破折号。
随时随地看视频慕课网APP

相关分类

Go
我要回答