LoginSignup
93
52

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-05-19

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言語の書式指定子を例付きでまとめた

※ ブログでも同一記事を投稿している
Go言語の便利なfmt.Sprintf ~任意の型と文字列をまとめて文字列(string型に)~

93
52
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
93
52