Golang将字符串转换为int64


74

我想将字符串转换为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?

Answers:


56

不,没有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


31
尽管您的答案是正确的,但您可以添加示例使其变得非常友好
GalAbra

175

将字符串解析为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))

输出:

您好,类型为int64的9223372036854775807!

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


2
我认为这应该标记为正确答案。
路加福音

2
一个人也可以删除反射的用法并像使用它一样;fmt.Printf("Hello, %v with type %T!\n", i, i)甚至可以采取进一步措施,可以使用;fmt.Printf("Hello, %v with type %[1]T!\n", i)
伊尔吉特·耶尔迪姆
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.