fmtパッケージによって提供されるprint系関数。
Fprint, Sprintln, Printf...などいろいろあって、なんとなく使っているとこんがらがってしまうので、違いを整理してみました。
初歩的な内容ですが、間違っていたらご指摘ください
はじめに
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!
https://golang.org/pkg/fmt/#Fprint
https://golang.org/pkg/fmt/#Fprintf
https://golang.org/pkg/fmt/#Fprintln
接頭辞 S
Sprint()
, Sprintf()
, Sprintln()
はじめに「S」が付いたものは、出力ではなくフォーマットした結果を文字列で返します。
変数に代入する際などはこちらを使用します。
hello := fmt.Sprint("Hello world!")
fmt.Print(hello)
// -> Hello world!
https://golang.org/pkg/fmt/#Sprint
https://golang.org/pkg/fmt/#Sprintf
https://golang.org/pkg/fmt/#Sprintln
接尾辞 f
Printf()
, Fprintf()
, Sprintf()
後ろに「f」が付いたものは、フォーマットを指定することができます。
hello := "Hello world!"
fmt.Printf("%s\n", hello)
fmt.Printf("%#v\n", hello)
// -> Hello world!
// "Hello world!"
https://golang.org/pkg/fmt/#Printf
https://golang.org/pkg/fmt/#Fprintf
https://golang.org/pkg/fmt/#Sprintf
接尾辞 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!
https://golang.org/pkg/fmt/#Println
https://golang.org/pkg/fmt/#Sprintln
https://golang.org/pkg/fmt/#Fprintln
まとめ
- 接頭辞 F
- 書き込み先を指定
- 接頭辞 S
- 結果を文字列で返す
- 接尾辞 f
- フォーマットを指定
- 接尾辞 ln
- オペランド間にスペース、最後に改行を追加
特徴を覚えて、使い分けましょう
参考