概要
大したことじゃないんですが、忘れないうちにメモメモ。
Goには、ビルトイン関数として print()
と println()
というのが用意されています。
これ、今まで fmtパッケージの方にもあるのに何で存在してるんだろうって思ってました and 使ったことも無かったです。
何の違いがあるんだろうって思って、builtin/builtin.go
の関数定義の部分のコメントみてみたら以下のように書かれていました。
以下、builtin/builtin.go
より。
// 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. func print(args ...Type)
なるほど、、こっちは標準エラー側に出力してくれるんですね。。fmtパッケージをimportする必要がないから、確かにデバッグ時には便利そう。でも、「言語としてずっとこの関数を保持しておくかどうかは保証しないよ」って書いてあるので、常時利用するものでは無いみたいですね。
てことで、一応試してみました。
サンプル
package builtin_ import "fmt" // PrintFunc は、ビルドイン関数のprintとfmt.Printの違いについてのサンプルです. func PrintFunc() error { // ------------------------------------------------------------ // ビルドイン関数の print() と fmt.Print() の違い // // ビルドイン関数の print(), println() は標準エラーに出力する // fmt.PrintXX は、標準出力に出力する // // ビルトイン関数の方は、fmtパッケージをimportする必要がないため // アプリのブート時やデバッグ目的に利用すると便利。 // // ただし、ビルドイン関数である print(), println() のコメントには // 以下の一文が記載されている。(builtin/builtin.goより) // "it is not guaranteed to stay in the language." // ------------------------------------------------------------ var ( message = "helloworld" ) // fmtパッケージの方は標準出力に出力する fmt.Println("[fmt ]", message) // ビルトインの方は標準エラーに出力する println("[builtin]", message) return nil }
https://github.com/devlights/try-golang/blob/master/builtin_/printfunc.go
実行すると以下な感じ。
$ make run EXAMPLE=builtin_print > $HOME/tmp/try-golang-stdout.log 2> $HOME/tmp/try-golang-stderr.log $ cat $HOME/tmp/try-golang-stdout.log [Name] "builtin_print" [fmt ] helloworld $ cat $HOME/tmp/try-golang-stderr.log [builtin] helloworld
確かに標準エラーに出力されてますね。
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場