Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

【Go】print系関数の違い

More than 1 year has passed since last update.

fmtパッケージによって提供されるprint系関数。
Fprint, Sprintln, Printf...などいろいろあって、なんとなく使っているとこんがらがってしまうので、違いを整理してみました。
初歩的な内容ですが、間違っていたらご指摘ください :kissing:

はじめに

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

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

基本形 Print()

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

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

https://golang.org/pkg/fmt/#Print

接頭辞 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
オペランド間にスペース、最後に改行を追加

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

参考

https://golang.org/pkg/fmt/

taji-taji
植物系エンジニア。 こんなiOSアプリ作りました。 「観察日記」 https://appsto.re/jp/kHAx_.i 「My Closet」 https://appsto.re/jp/OBRIcb.i
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away