Go言語の便利なfmt.Sprintf ~任意の型と文字列をまとめて文字列(string型に)~

Go言語の便利なfmt.Sprintf ~任意の型と文字列をまとめて文字列(string型に)~

Goの静的型付けにおいて、stringと他の型をstring型として扱うことができるようにするfmt.Sprintfという便利な関数が存在する。

Goの書式指定子

Go言語は、静的型付けの言語あり、stringと他の型は一緒には扱えない。
そのため、書式指定子 が存在する。

例えば以下のようにできる。

package main

import (
    "fmt"
)

func main() {
    type Person struct {
        Age    int
        Height int
    }

    p := new(Person)
    p.Age = 26
    p.Height = 170

    fmt.Printf("年齢%d\n身長%d", p.Age, p.Height)
}

結果

年齢26
身長170

fmt.Sprintf を使う

上記のコードは、stringと構造体Personのフィールドを一緒に扱っていた。

書式指定子で、任意の型とstringを一緒に扱えるようになったはいいが、それ自体を文字列(string)として表すことはできないだろうか。
そんな時に活躍するのが、 fmt.Sprintfである。

fmt.Sprintf は、書式指定子に沿ってフォーマットした文字列を返してくれる。

package main

import (
    "fmt"
)

func main() {
    type Person struct {
        Age    int
        Height int
    }

    p := new(Person)
    p.Age = 26
    p.Height = 170

    str := fmt.Sprintf("年齢:%d\n身長:%d", p.Age, p.Height)
    fmt.Println(str)

}

結果

年齢:26
身長:170

上記のコードでは、 "年齢%d\n身長%d" という文字列(string)と p.Age, p.Height というint型が書式指定子によってフォーマットされ、それらが結合された文字列がstring型として、戻り値でstrに格納されている。

もう少し応用してみる

以下のようなことも可能だ。

package main

import (
    "fmt"
)

func main() {
    type Person struct {
        Age    int
        Height int
    }

    p := new(Person)
    p.Age = 26
    p.Height = 170

    str := fmt.Sprintf("年齢:%d\n身長:%d", p.Age, p.Height)
    fmt.Println(str + "\n" + "ハンドルネーム:Sekky0905")

}

上記のコードは、一旦fmt.Sprintfstring とintをフォーマットし、stringにまとめてstrに格納している。

strstring型なので、fmt.Println(str + "\n" + "ハンドルネーム:Sekky0905")というのが可能になっている。

参考にさせていただいたサイト

fmt.Sprintf

関連記事

忘れがちなGo言語の書式指定子を例付きでまとめた

  • Qiitaでも同一の記事を投稿している

qiita.com