如何在 Go 中将字符串转换为整数类型

Suraj Joshi 2023年1月30日 2020年6月9日
  1. 来自 strconv 包的 Atoi() 函数
  2. 来自 strconv 包的 ParseInt() 函数
  3. fmt.Sscanf 方法
  4. 方法比较
如何在 Go 中将字符串转换为整数类型

Go 是静态类型的语言,如果我们将变量定义为整型,则它只能为整型。我们不能在不转换变量的字符串数据类型的情况下为其分配字符串。Go 有一个名为 strconv 的内置包,它提供了三个函数 Atoi()Sscanf()ParseInt() 将 Go 字符串转换为整型 int

来自 strconv 包的 Atoi() 函数

strconv 包实现了基本数据类型的字符串表示之间的转换。要将字符串转换为整数,我们使用来自 strconv 包的 Atoi() 函数。Atoi 代表 ASCII to integer

package main

import (
    "fmt"
    "strconv"
)

func main() {
    age := "13"
    fmt.Printf("Datatype of age before conversion : %T\n", age)
    fmt.Println("After Conversion:")
    if sv, err := strconv.Atoi(age); err == nil {
        fmt.Printf("%T, %v\n", sv, sv)
    }
}   

输出:

Datatype of age before conversion : string
After Conversion:
int, 13

如果输入字符串不是整数格式,则该函数返回零。

package main

import (
    "fmt"
    "strconv"
)

func main() {
    age := "abc"
    fmt.Printf("Datatype of age before conversion : %T\n", age)
    fmt.Println("After Conversion:")
    sv, _ := strconv.Atoi(age)

    fmt.Printf("%T, %v\n", sv, sv)

}  

输出:

Datatype of age before conversion : string
After Conversion:
int, 0

来自 strconv 包的 ParseInt() 函数

strconv.ParseInt(s, base, bitSize) 方法以给定的 base (0,2 到 36)和位大小(0 到 64)解释输入字符串 s 并返回一个对应的整数。Atoi(s) 等同于 ParseInt(s, 10, 0)

package main

import (
    "fmt"
    "reflect"
    "strconv"
)

func main() {
    x := "123"
    fmt.Println("Value of x before conversion: ", x)
    fmt.Println("Datatype of x before conversion:", reflect.TypeOf(x))
    intStr, _ := strconv.ParseInt(x, 10, 64)
    fmt.Println("Value after conversion: ", intStr)
    fmt.Println("Datatype after conversion:", reflect.TypeOf(intStr))
}

输出:

Value of x before conversion:  123
Datatype of x before conversion: string
Value after conversion:  123
Datatype after conversion: int64

fmt.Sscanf 方法

fmt.Sscanf() 非常适合解析包含数字的自定义字符串。Sscanf() 函数扫描参数字符串,将连续的以空格分隔的值存储到格式定义的连续参数中,并返回成功解析的项目数。

package main

import (
    "fmt"
)

func main() {
    s := "id:00234"

    var i int
    if _, err := fmt.Sscanf(s, "id:%5d", &i); err == nil {
        fmt.Println(i)
    }
} 

输出:

234

方法比较

strconv.ParseInt() 是所有方法中最快的,strconv.Atoi()strconv.ParseInt() 要慢一点,而 fmt.Sscanf() 是除最灵活方法之外最慢的方法。

Author: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

相关文章 - Go String