Go で文字列を整数型に変換する方法

Suraj Joshi 2023年1月30日
  1. strconv パッケージの Atoi() 関数
  2. Go strconv パッケージの ParseInt() 関数
  3. fmt.Sscanf メソッド
  4. メソッドの比較
Go で文字列を整数型に変換する方法

Go は静的に型付けされた言語であり、変数を int として定義すると、int のみが可能です。変数の文字列データ型を変換せずに、文字列 string をそれに割り当てることはできません。Go には、strconv という組み込みパッケージがあり、Go 文字列を int に変換するための 3つの関数 Atoi()Sscanf()、および ParseInt() を提供しています。

strconv パッケージの Atoi() 関数

パッケージ strconv は、基本的なデータ型の文字列表現との間の変換を実装します。文字列を整数に変換するには、strconv パッケージの Atoi() 関数を使用します。AtoiASCII 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

Go 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() は最も柔軟なメソッドを除いて最も遅い。

著者: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

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

LinkedIn

関連記事 - Go String