Golang将字符串转换为int64

135
我想将一个字符串转换为int64。我从strconv包中找到的是Atoi函数。它似乎将一个字符串强制转换为int并返回:
// Atoi is shorthand for ParseInt(s, 10, 0).
func Atoi(s string) (i int, err error) {
        i64, err := ParseInt(s, 10, 0)
    return int(i64), err
}

ParseInt 实际上返回一个 int64:
func ParseInt(s string, base int, bitSize int) (i int64, err error){
     //...
}

如果我想从字符串中获取一个int64,我应该避免使用Atoi,而是使用ParseInt吗?或者有一个隐藏的Atio64函数吗?


int 是一种带符号整数类型,其大小至少为32位。然而它是一种独特的类型,并不是 int32 的别名。因此,在 int64 范围内使用它是没问题的,也不会导致数据丢失。 - Ayush Kumar
3个回答

245

将字符串解析为int64的示例:

// Use the max value for signed 64 integer. http://golang.org/pkg/builtin/#int64
var s string = "9223372036854775807"
i, err := strconv.ParseInt(s, 10, 64)
if err != nil {
    panic(err)
}
fmt.Printf("Hello, %v with type %s!\n", i, reflect.TypeOf(i))

输出:

你好,9223372036854775807,类型为int64!

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


2
我认为这应该被标记为正确答案。 - Luke
4
也可以不使用 reflect,而只是这样使用:fmt.Printf("Hello, %v with type %T!\n", i, i)。或者更进一步,我们可以使用:fmt.Printf("Hello, %v with type %[1]T!\n", i) - Ilgıt Yıldırım
我建议使用 strings.TrimSpace(),因为一些意外的空格可能会意外改变数字值。 - PJ Brunet
@PJBrunet 空格可能会导致解析错误,但它如何改变值呢? - undefined

110
不,没有Atoi64。您还应该将64作为最后一个参数传递给ParseInt,否则在32位系统上可能无法产生预期的值。
var s string = "9223372036854775807"
i, _ := strconv.ParseInt(s, 10, 64)
fmt.Printf("val: %v ; type: %[1]T\n", i)

https://play.golang.org/p/FUC8QO0-lYn


34
虽然你的答案是正确的,但你可以加上一个例子,使它更符合SO社区的习惯。 - GalAbra

5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接