Go言語の文字列を数値に変換する方法!初心者でもわかるstrconvパッケージの基本
生徒
「Go言語で文字列を数値に変えることってできますか?」
先生
「はい、できます。Go言語にはstrconv(ストラコンブと読みます)というパッケージがあって、それを使えば文字列を整数や小数に変換することができますよ。」
生徒
「例えば『123』という文字列を数字の123に変換できるってことですか?」
先生
「そうです。その変換をしないと、計算ができないのでとても大事なんです。では基本から見ていきましょう!」
1. なぜ文字列を数値に変換する必要があるのか?
プログラミングをしていると、数字に見える情報が実は「文字列」として扱われていることがよくあります。例えば、ユーザーが入力した「100」というデータは見た目は数字ですが、コンピュータの中では文字として保存されています。このままでは足し算や掛け算などの計算ができません。
そこで、文字列を数値に変換する必要があります。Go言語では、この役割を果たすのがstrconvパッケージです。strconvは「string convert」の略で、その名の通り文字列を数値などに変換するための便利な機能が揃っています。
2. strconv.Atoiで文字列を整数に変換する
strconv.Atoiは、文字列を整数(int型)に変換する関数です。「Atoi」は「ASCII to integer」の略です。つまり、文字列(ASCII文字列)を整数に変換するイメージです。
package main
import (
"fmt"
"strconv"
)
func main() {
str := "123"
num, err := strconv.Atoi(str)
if err != nil {
fmt.Println("変換エラー:", err)
} else {
fmt.Println("数値に変換成功:", num)
}
}
数値に変換成功: 123
ここでは「123」という文字列が整数123に変換されました。もし「abc」など数値にできない文字を入れると、エラーになります。
3. strconv.ParseIntで大きな整数を扱う
strconv.ParseIntは、より細かく整数の変換をコントロールできます。例えば、基数(10進数や16進数など)やビット数(int64など)を指定できます。日常的にはAtoiで十分ですが、大きな数値を扱うときはこちらを使います。
package main
import (
"fmt"
"strconv"
)
func main() {
str := "1234567890"
num, err := strconv.ParseInt(str, 10, 64)
if err != nil {
fmt.Println("変換エラー:", err)
} else {
fmt.Println("int64に変換成功:", num)
}
}
int64に変換成功: 1234567890
4. strconv.ParseFloatで小数を扱う
小数を扱いたいときはstrconv.ParseFloatを使います。例えば「3.14」という文字列を小数点を含む数値に変換できます。
package main
import (
"fmt"
"strconv"
)
func main() {
str := "3.14"
num, err := strconv.ParseFloat(str, 64)
if err != nil {
fmt.Println("変換エラー:", err)
} else {
fmt.Println("float64に変換成功:", num)
}
}
float64に変換成功: 3.14
このように、浮動小数点数(float64)として正しく扱うことができます。小数を使うときは必ずParseFloatを選びましょう。
5. 文字列から数値への変換でよくあるエラー
文字列を数値に変換するときに気をつけたいのは「変換できない文字が含まれている場合」です。例えば「123」(全角数字)や「100円」のように数字以外が含まれる文字列はエラーになります。
エラー処理をきちんと書いておくことで、プログラムが途中で止まらずに安全に動作します。エラーが発生したときにメッセージを出すことで、ユーザーに「入力が間違っている」と知らせることができます。
6. 数値から文字列に戻すには?
ここまで文字列から数値に変換する方法を学びましたが、逆に数値を文字列に戻すこともできます。そのときはstrconv.Itoa(Integer to ASCII)を使います。
package main
import (
"fmt"
"strconv"
)
func main() {
num := 456
str := strconv.Itoa(num)
fmt.Println("文字列に変換:", str)
}
文字列に変換: 456
このように、数値と文字列を相互に変換できると、入力や出力を柔軟に扱うことができるようになります。