文字列

Go言語の文字列と数値変換について解説

Go言語で文字列と数値を相互に変換する操作は、データ処理の基本です。

strconvパッケージを活用すると、AtoiItoaなどの関数でシンプルに変換が行えます。

この記事では、主要な変換方法とその際の留意点について解説します。

文字列から数値への変換

基本となる変換関数

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.Itoastrconv.FormatIntを使用できます。

strconv.Itoaint型専用の変換関数であり、strconv.FormatIntint64型など幅広い数値表現に対応しています。

用途に応じて使い分けると良いでしょう。

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言語の文字列と数値変換に関する基本的な関数利用法やエラーチェック、パフォーマンス最適化の手法について具体例を交え、詳細に解説しました。

総括すると、各変換関数の使い分けやエラー対策を理解することで、信頼性の高い変換処理が実現できる内容でした。

ぜひサンプルコードを実際に動かし、知識を試してみてください。

関連記事

Back to top button
目次へ