Posted at

【Go】print系関数の違い

More than 3 years have passed since last update.

fmtパッケージによって提供されるprint系関数。

Fprint, Sprintln, Printf...などいろいろあって、なんとなく使っているとこんがらがってしまうので、違いを整理してみました。

初歩的な内容ですが、間違っていたらご指摘ください :kissing:


はじめに

print系の関数はPrint()を基本形として、{接頭辞}Print{接尾辞}()というふうに接頭辞・接尾辞によって挙動が変わってくるようですね。

ですので、説明も基本形のPrint()からはじめ、各接頭辞・接尾辞による挙動の違いを見ていきます。


基本形 Print()

デフォルトのフォーマットで標準出力に出力します。


fmt.Print("Hello world!")
// -> Hello world!


接頭辞 F

Fprint(), Fprintf(), Fprintln()

はじめに「F」が付いているものは、書き込み先を明示的に指定できます。


// os.Stdout で書き込み先を標準出力に指定
fmt.Fprint(os.Stdout, "Hello world!")
// -> Hello world!


接頭辞 S

Sprint(), Sprintf(), Sprintln()

はじめに「S」が付いたものは、出力ではなくフォーマットした結果を文字列で返します。

変数に代入する際などはこちらを使用します。


hello := fmt.Sprint("Hello world!")
fmt.Print(hello)
// -> Hello world!


接尾辞 f

Printf(), Fprintf(), Sprintf()

後ろに「f」が付いたものは、フォーマットを指定することができます。


hello := "Hello world!"
fmt.Printf("%s\n", hello)
fmt.Printf("%#v\n", hello)
// -> Hello world!
// "Hello world!"


接尾辞 ln

Println(), Fprintln(), Sprintln()

後ろに「ln」が付いたものは、オペランドの間に半角スペースが入り、文字列の最後に改行が追加されます。


// Printの場合は、スペースも改行も挿入されない
fmt.Print("Hello", "world!")
fmt.Print("Hello", "world!")
// -> Helloworld!Helloworld!

// Printlnの場合は、スペースと改行が挿入される
fmt.Println("Hello", "world!")
fmt.Println("Hello", "world!")
// -> Hello world!
// Hello world!


まとめ


接頭辞 F

書き込み先を指定

接頭辞 S

結果を文字列で返す

接尾辞 f

フォーマットを指定

接尾辞 ln

オペランド間にスペース、最後に改行を追加

特徴を覚えて、使い分けましょう :blush:


参考

http://golang.jp/pkg/fmt