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

Suraj Joshi 2023年1月30日 2020年6月9日 Go Go String
  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

  • Go 中如何创建多行字符串
  • Go 中如何解析日期字符串
  • 如何在 Go 中高效地串联字符串
  • 如何在 Go 中将整型 int 值转换为字符串
  • 在 Go 中将布尔值转换为字符串