次の関数があるとします:
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
何が悪いのですか?
https://play.golang.org/p/FtytYJkHSc
strconv.ParseIntに切り替えて、型としてint64を明示的に使用すると役立つようです。MinInt64文字列のダッシュ文字にも問題がありましたが、それは私の最後にあるかもしれませんが、チェックして、それが何らかのUnicodeダッシュではなく基本的なASCII文字であることを確認する価値があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加