2

こんな感じでコードを書いていきます。通常の int (他の関数呼び出し用) が必要ですが、parseInt は 64 ビットの int しか生成しません。

i64, err := strconv.ParseInt(s, 10, 0)
if err != nil {
    fmt.Println("parsing failed for", s)
}
i := int(i64)

http://play.golang.org/p/_efRm7yp3o

余分なキャストを避ける方法はありますか? または、これをより慣用的にする方法はありますか?

4

2 に答える 2

3

strconv.Atoiどのラップを好きなように使用できますstrconv.ParseInt

于 2013-07-15T16:32:13.680 に答える
0

strconv.ParseIntbitSize parameterを使用する

package main

import (
        "fmt"
        "strconv"
)

// 32 or 64 depending on platform
const IntBits = 1 << (^uint(0)>>32&1 + ^uint(0)>>16&1 + ^uint(0)>>8&1 + 3)

func printInt(i int) {
        fmt.Println(i)
}

func main() {
        s := "-123123112323231231"
        i64, err := strconv.ParseInt(s, 10, IntBits)
        if err != nil {
                fmt.Println("parsing failed for ", s)
        }
        i := int(i64)
        printInt(i)

        i64, err = strconv.ParseInt(s, 10, 32)
        if err != nil {
                fmt.Println("parsing failed for ", s)
        }
        i = int(i64)
        printInt(i)
}

遊び場


出力

-123123112323231231
parsing failed for  -123123112323231231
-2147483648
于 2013-07-15T16:32:45.620 に答える