覚えられなくて使うたびにググってしまうので、以後楽をするためにスニペットを記す。
パッケージ
strconvパッケージを使う。
文字列 → 数値変換(パース)
func Atoi(s string) (i int, err error)
文字列を10進数のint型にパースする。ParseInt(s, 10, 0)の省略形。
var i int i, _ = strconv.Atoi("255") fmt.Println(i) // => 255
func ParseBool(str string) (value bool, err error)
文字列をbool型にパースする。
var b bool b, _ = strconv.ParseBool("true") fmt.Println(b) // => true
受け付ける値は1, t, T, TRUE, true, True, 0, f, F, FALSE, false, False
func ParseInt(s string, base int, bitSize int) (i int64, err error)
文字列を任意の基数(2進数〜36進数)・任意のビット長(8〜64bit)のIntにパースする。
var i32, i64, ib16, ib0 int64 i32, _ = strconv.ParseInt("255", 10, 32) i64, _ = strconv.ParseInt("255", 10, 64) ib16, _ = strconv.ParseInt("ff", 16, 16) ib0, _ = strconv.ParseInt("0xff", 0, 16) fmt.Println(i32, i64, ib16, ib0) // => 255 255 255 255
baseは変換に用いる基数(2〜36)。0の場合、s文字列の書式から判断する(0x接頭詞がついていたら16進数など)。bitSizeは0,8,16,32,64(それぞれint, int8, int16, int32, and int64に該当)。どのbitSizeでも戻り値の型自体はint64だが、それぞれの型に値を変えずに変換できる。
func ParseUint(s string, base int, bitSize int) (n uint64, err error)
文字列を任意の基数(2進数〜36進数)・任意のビット長(8〜64bit)のUintにパースする。ParseIntと同様。
var ui uint64 ui, _ = strconv.ParseUint("255", 10, 32) fmt.Println(ui) // => 255
func ParseFloat(s string, bitSize int) (f float64, err error)
文字列を任意のビット長(32,64bit)のUintにパースする。
bitSizeは32か64(float32とfloat64に相当)。戻り値の型自体はfloat64だが、それぞれの型に値を変えずに変換できる
var f32, f64 float64 f32, _ = strconv.ParseFloat("3.14159265359", 32) f64, _ = strconv.ParseFloat("3.14159265359", 64) fmt.Println(f32, f64) // => 3.1415927410125732 3.14159265359
ParseXXX関数のエラーハンドリング
ParseXXX関数のerrorの具象型はNumErrorで、(NumError).Errで範囲エラーか書式エラーかを判別できる。
_, e = strconv.ParseInt("Bad number", 10, 32) if e != nil { if enum, ok := e.(*strconv.NumError); ok { switch enum.Err { case strconv.ErrRange: log.Fatal("Bad Range Error") case strconv.ErrSyntax: log.Fatal("Syntax Error") } } }
数値 → 文字列(フォーマット)
func Itoa(i int) string
func FormatBool(b bool) string
func FormatInt(i int64, base int) string
func FormatUint(i uint64, base int) string
各数値型を文字列にフォーマットする。
fmt.Println(strconv.Itoa(255)) // => 255 fmt.Println(strconv.FormatBool(true)) // => true fmt.Println(strconv.FormatInt(255, 10)) // => 255
func FormatFloat(f float64, fmt byte, prec, bitSize int) string
float64型を文字列にフォーマットする。
fmt.Println(strconv.FormatFloat(1234.56789, 'b', 4, 64)) // => 5429687001335527p-42 fmt.Println(strconv.FormatFloat(1234.56789, 'e', 4, 64)) // => 1.2346e+03 fmt.Println(strconv.FormatFloat(1234.56789, 'E', 4, 64)) // => 1.2346E+03 fmt.Println(strconv.FormatFloat(1234.56789, 'f', 4, 64)) // => 1234.5679 fmt.Println(strconv.FormatFloat(1234.56789, 'g', 4, 64)) // => 1235 fmt.Println(strconv.FormatFloat(1234.56789, 'G', 4, 64)) // => 1235 fmt.Println(strconv.FormatFloat(1234.56789, 'G', 3, 64)) // => 1.23E+03
fmtは出力書式で'b','e','E','f','g','G'のいずれか。
precは桁数。eEFのとき小数点以下桁数。gGのとき全体の桁数。(g,Gはprecがfの少数点以上の桁数を満たしていれば額数表記になるらしい)