Go言語では、整数を文字列に変換する効率的な方法がいくつか提供されています。これは、数値の表示、データのログ記録、または様々な目的のための文字列の構築など、一般的なタスクです。この記事では、`strconv.Itoa`関数、`strconv.FormatInt`関数、`fmt.Sprint`メソッドの3つの主要なアプローチについて説明します。
目次
strconv.Itoa
関数
符号付き整数(`int`)を文字列に変換するには、`strconv.Itoa`が最もシンプルで効率的なソリューションです。整数を受け取り、その文字列相当値を返します。非常に信頼性が高い一方、潜在的な(ただしまれな)エラーはパニックを引き起こします。
package main
import (
"fmt"
"strconv"
)
func main() {
num := 12345
str := strconv.Itoa(num)
fmt.Println(str) // 出力: 12345
negativeNum := -9876
negativeStr := strconv.Itoa(negativeNum)
fmt.Println(negativeStr) // 出力: -9876
}
その簡潔さと速度は、単純な符号付き整数の変換に最適です。
strconv.FormatInt
関数
`strconv.FormatInt`は、様々な整数サイズ(`int64`、`int32`など)をサポートし、出力文字列の基数(radix)を指定できるため、柔軟性が高くなっています。この機能は、バイナリ、8進数、または16進数の形式で数値を表す場合に特に役立ちます。
package main
import (
"fmt"
"strconv"
)
func main() {
num := int64(12345)
str := strconv.FormatInt(num, 10) // 10進数
fmt.Println(str) // 出力: 12345
hexStr := strconv.FormatInt(num, 16) // 16進数
fmt.Println(hexStr) // 出力: 3039
binStr := strconv.FormatInt(num, 2) // 2進数
fmt.Println(binStr) // 出力: 11000000111001
unsignedNum := uint64(12345)
unsignedStr := strconv.FormatUint(unsignedNum, 10)
fmt.Println(unsignedStr) //出力: 12345
}
第2引数は基数を設定します(10は10進数、16は16進数、2は2進数、8は8進数)。符号なし整数には、`strconv.FormatUint`を使用します。
fmt.Sprint
メソッド
`fmt.Sprint`関数は、整数を含む様々なデータ型を文字列に変換するための汎用的なソリューションを提供します。単純な整数変換では`strconv.Itoa`よりも効率は劣りますが、複数の値を同時にフォーマットする場合の汎用性は優れています。
package main
import (
"fmt"
)
func main() {
num := 12345
str := fmt.Sprint(num)
fmt.Println(str) // 出力: 12345
str2 := fmt.Sprintf("The number is: %d", num) // より詳細なフォーマット制御
fmt.Println(str2) // 出力: The number is: 12345
multipleValues := fmt.Sprint("Value1: ", 10, ", Value2: ", 20)
fmt.Println(multipleValues) // 出力: Value1: 10, Value2: 20
}
`fmt.Sprint`は、より大きな文字列の中に整数を埋め込む場合に特に役立ちます。`fmt.Sprintf`は、フォーマット指定子(`%d`など)を使用して、フォーマットをより細かく制御できます。
要約すると、`strconv.Itoa`は単純な符号付き整数変換に最適です。`strconv.FormatInt`(および`strconv.FormatUint`)は基数の制御と様々な整数サイズを処理します。`fmt.Sprint`と`fmt.Sprintf`は柔軟性が高くなりますが、基本的な整数から文字列への変換には効率が劣る可能性があります。ニーズとコーディングスタイルに最適に適合するメソッドを選択してください。