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