LoginSignup
34
26

More than 5 years have passed since last update.

【Go】fmt.Print とビルトイン関数の print の違い

Posted at

はじめに

以前、fmtパッケージにて提供されるprint系の関数についての投稿を行いました。
【Go】print系関数の違い

こちらの投稿にて、ビルトイン関数の print, println についても紹介してみては?とコメントをいただいたので、調べてみました。

ビルトイン関数のprint, printlnについては私自身の実用経験がないので、単純に調べたことをまとめただけになります。
間違い等あればご指摘ください。 :raised_hands:

fmt.Print() について

fmt.Print()については「【Go】print系関数の違い」にてまとめさせていただきましたので、そちらをご参照ください。

ビルトイン関数 print, println について

まずは print について公式のドキュメントを見てみましょう。
builtin - The Go Programming Language

The print built-in function formats its arguments in an implementation-specific way and writes the result to standard error. Print is useful for bootstrapping and debugging; it is not guaranteed to stay in the language.

訳すと、

- print関数は引数をフォーマットして標準エラーに書き込みます。ブートストラッピングやデバッグに役立ちますが、このまま言語に残される保証はありません。

といった感じでしょうか?

ちなみに、println については前述の投稿でも紹介の通り、
接尾辞「ln」がつくのでオペランド間にスペースが入り、最後に改行が加えられるという点がprintと異なります。

fmt.Print() とビルトイン関数 print() の違いは?

それでは、fmt.Print() とビルトイン関数 print() の違いをあげていきましょう。

1. パッケージの import

- fmt.Print()

fmtパッケージで提供されるPrint関数は当然ながらfmtパッケージをimportする必要があります。

import "fmt"

fmt.Print("hello")

- ビルトイン関数 print()

一方、ビルトイン関数は組み込みなので、そのまま使用できます。

print("hello")

2. 書き込み先

- fmt.Print()

fmt.Print()では、標準出力に書き込まれます。
また、fmt.Fprint()とすると書き込み先を設定することも可能です。

- ビルトイン関数 print()

一方、ビルトイン関数では、
ドキュメントにある通り、標準エラーに書き込まれます。

3. フォーマット

- fmt.Print()

fmt.Print() ではデフォルトのフォーマットでフォーマットされます。
デフォルトのフォーマットはこちら。

bool:                    %t
int, int8 etc.:          %d
uint, uint8 etc.:        %d, %x if printed with %#v
float32, complex64, etc: %g
string:                  %s
chan:                    %p
pointer:                 %p

また、接尾辞にfがついたfmt.Printfなどはフォーマットを指定できます。

- ビルトイン関数 print()

一方、ビルトイン関数のprintでは、フォーマットの指定はできないようです。

The print built-in function formats its arguments in an implementation-specific way

とあり、訳すと「実装固有の方法でフォーマットする」という感じのようですが、
正直なところ、この辺りは理解しきれていないです。。
(詳しい方教えていただけるとありがたいです :sweat_smile:

まとめ

ざっと調べたところ、

fmtパッケージ Print系関数 ビルトイン関数 print
パッケージの import fmt パッケージの import
書き込み先 標準出力(Fprint系は書き込み先の設定が可能) 標準エラー
フォーマット 「%v」で指定されるデフォルトのフォーマット(Printf系はフォーマットの指定が可能) 「an implementation-specific way」実装固有の方法?

の3点が違いのようです。

補足・間違いなどご指摘ください。 :pray:

参考

builtin - The Go Programming Language
https://golang.org/pkg/fmt/
http://stackoverflow.com/questions/14680255/whats-the-difference-between-fmt-println-and-println-in-go

34
26
1

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
34
26