Go言語の文字列と数値変換について解説
Go言語で文字列と数値を相互に変換する操作は、データ処理の基本です。
strconv
パッケージを活用すると、Atoi
やItoa
などの関数でシンプルに変換が行えます。
この記事では、主要な変換方法とその際の留意点について解説します。
文字列から数値への変換
基本となる変換関数
strconv.Atoiを使った整数変換
Go言語では、strconv.Atoi
を用いることで文字列を手軽に整数に変換できます。
変換に失敗した場合はエラーが返されるため、必ずエラーチェックを行うように注意してください。
以下はサンプルコードです。
package main
import (
"fmt"
"strconv"
)
func main() {
// 変換対象の文字列
str := "123"
// 文字列を整数に変換
num, err := strconv.Atoi(str)
if err != nil {
// エラー発生時の処理
fmt.Println("変換エラー:", err)
return
}
fmt.Println("変換成功:", num)
}
変換成功: 123
strconv.ParseIntによる柔軟な変換
strconv.ParseInt
は、基数やビットサイズを指定して文字列を整数に変換するため、16進数など様々な表現に対応できます。
下記のサンプルでは、16進数表記の文字列を整数に変換しています。
package main
import (
"fmt"
"strconv"
)
func main() {
// 16進数の文字列
str := "FF"
// 16進数を10進数へ変換(基数16, 64ビット整数)
num, err := strconv.ParseInt(str, 16, 64)
if err != nil {
fmt.Println("変換エラー:", err)
return
}
fmt.Println("16進数変換成功:", num)
}
16進数変換成功: 255
浮動小数点数の変換方法
strconv.ParseFloatの使用例と注意点
strconv.ParseFloat
を使うと、文字列を浮動小数点数float32
またはfloat64
に変換できます。
第2引数でビットサイズを指定することで、変数に適した精度の数値を取得します。
入力が不正な場合にはエラーが返されるため、常にエラーチェックを実施することが重要です。
package main
import (
"fmt"
"strconv"
)
func main() {
// 浮動小数点数の文字列
str := "3.14159"
// 文字列を64ビット浮動小数点数に変換
num, err := strconv.ParseFloat(str, 64)
if err != nil {
fmt.Println("変換エラー:", err)
return
}
// 数値をフォーマットして出力
fmt.Printf("変換成功: %f\n", num)
}
変換成功: 3.141590
数値から文字列への変換
整数の文字列変換
strconv.Itoaとstrconv.FormatIntの使い分け
整数の数値を文字列に変換するには、strconv.Itoa
やstrconv.FormatInt
を使用できます。
strconv.Itoa
はint
型専用の変換関数であり、strconv.FormatInt
はint64
型など幅広い数値表現に対応しています。
用途に応じて使い分けると良いでしょう。
package main
import (
"fmt"
"strconv"
)
func main() {
// int型の数値を文字列に変換
intVal := 456
str1 := strconv.Itoa(intVal) // int -> 文字列
fmt.Println("strconv.Itoa:", str1)
// int64型の数値を文字列に変換
var int64Val int64 = 789
str2 := strconv.FormatInt(int64Val, 10) // 10進数形式で変換
fmt.Println("strconv.FormatInt:", str2)
}
strconv.Itoa: 456
strconv.FormatInt: 789
浮動小数点数の文字列変換
strconv.FormatFloatによる精度調整
strconv.FormatFloat
は浮動小数点数を文字列に変換する関数です。
引数で数値の表現形式(例えば固定小数点形式'f'
)や小数点以下の桁数を指定できるため、任意の精度で数値を文字列化できます。
以下の例では、固定小数点形式で小数点以下2桁に丸めています。
package main
import (
"fmt"
"strconv"
)
func main() {
// 浮動小数点数のサンプル値
floatVal := 3.1415926535
// 小数点以下2桁に丸めた文字列に変換
str := strconv.FormatFloat(floatVal, 'f', 2, 64)
fmt.Println("変換結果:", str)
}
変換結果: 3.14
エラーハンドリングとケース別対策
変換時のエラーチェックの基本
エラー処理の実装例と留意点
数値変換に失敗するケースは存在します。
例えば、数値に変換できない文字列を入力した場合はエラーを返すため、変換後には必ずエラーチェックを行う必要があります。
下記のサンプルでは、エラー処理の基本的な実装方法を示しています。
package main
import (
"fmt"
"strconv"
)
func main() {
// 数字に変換できない文字列を用意
str := "abc"
// Atoi関数による変換
num, err := strconv.Atoi(str)
if err != nil {
// エラーが発生した場合の処理
fmt.Println("エラーが発生しました:", err)
return
}
fmt.Println("変換成功:", num)
}
エラーが発生しました: strconv.Atoi: parsing "abc": invalid syntax
異常値への対策と事例
変換対象の文字列が異常な値を含む場合や、フォーマットが不正な場合にも対応が必要です。
例えば、不要な文字列が混在している場合や、数値の範囲を超える値が入力される場合です。
以下の例では、不正な文字列によるエラー処理の一例を示します。
package main
import (
"fmt"
"strconv"
)
func main() {
// 不正な値が含まれた文字列
invalidStr := "123abc"
// ParseIntを利用して変換を試みる
_, err := strconv.ParseInt(invalidStr, 10, 64)
if err != nil {
// 異常値に対するエラーハンドリング
fmt.Println("異常値の取り扱い:", err)
}
}
異常値の取り扱い: strconv.ParseInt: parsing "123abc": invalid syntax
パフォーマンスと最適化の考慮点
変換処理の高速化テクニック
実装時に気をつけるポイントと改善例
大量のデータ変換を行う場合、変換処理の回数を減らす工夫や、変換結果をキャッシュするなどの最適化が有効です。
以下のサンプルでは、スライス内の数値を逐次変換して出力する例を示します。
package main
import (
"fmt"
"strconv"
)
func main() {
// 数値のスライスを用意
numbers := []int{10, 20, 30, 40, 50}
// スライス内の全要素を文字列に変換して出力
for _, num := range numbers {
// 各回の変換処理
str := strconv.Itoa(num)
fmt.Println("変換結果:", str)
}
}
変換結果: 10
変換結果: 20
変換結果: 30
変換結果: 40
変換結果: 50
まとめ
この記事では、Go言語の文字列と数値変換に関する基本的な関数利用法やエラーチェック、パフォーマンス最適化の手法について具体例を交え、詳細に解説しました。
総括すると、各変換関数の使い分けやエラー対策を理解することで、信頼性の高い変換処理が実現できる内容でした。
ぜひサンプルコードを実際に動かし、知識を試してみてください。