Go で文字列を整数型に変換する方法
Go は静的に型付けされた言語であり、変数を int
として定義すると、int
のみが可能です。変数の文字列データ型を変換せずに、文字列 string
をそれに割り当てることはできません。Go には、strconv
という組み込みパッケージがあり、Go 文字列を int に変換するための 3つの関数 Atoi()
、Sscanf()
、および ParseInt()
を提供しています。
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
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 is a backend software engineer at Matrice.ai.
LinkedIn