ppの出力先を変えられるようにした

pp( k0kubun/pp · GitHub
)は非常にお気軽に使えてよいのだけど、デバッグ中にちょっと出力がウザいので抑えたり、また見たりしたいなー、というときに、import文をコメントアウトしたり変数を_に変えたりするのがめんどくさかった(それがGo wayなのではあるけれども)

そこで、DEBUGが有効なときに使える、Debug*みたいな関数群を追加するのを提案したところ、出力先を切り替えられるようにしてはどうか?という話になったので、実装して無事、取りこまれた。

customizable Print* functions output by walf443 · Pull Request #6 · k0kubun/pp · GitHub

import (
  "github.com/k0kubun/pp"
  "io/ioutil"
  "os"
)

func init() {
    if os.Getenv("DEBUG") == "" {
        pp.SetDefaultOutput(ioutil.Discard)
    }
}

こんな感じにしておくと、pp.PrintしているところがDEBUG環境変数が有効じゃないと出力されなくなるので、コードを変更しなくてもppの出力を抑制できるようになる。

自分は、今書いているパーサーで、実際に使われているデータとかをparseしてASTをdumpするやつ(コミットしていない)をgo testで走るようにしておいてそれをたまにppでdumpしたりしている。便利。

ppは、さらに欲をいえば、

import ( 
  "github.com/pp/pp"
)

みたいにpp organizerでホストされているようになれば、pp/ppで何も考えずimportできるようになって個人的にはとてもうれしい。githubはアクティビティが低いユーザーで良い名前を抑えていた場合、交渉して取れるようになっていると聞いたことがあるような気がするが、この場合はどうだろうか。

pp · GitHub

追記

import "gopkg.in/pp.v1"

できるようになったらしい。すばらしい。