给出以下功能:
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
我做错了什么?
答案 0 :(得分:1)
https://play.golang.org/p/FtytYJkHSc
切换到strconv.ParseInt并明确使用int64作为类型似乎有所帮助。我的MinInt64字符串中的短划线字符也存在问题,可能只是在我的最后,但值得检查并确保它是基本的ASCII字符而不是某种Unicode短划线。