付録BGoらしいコードの書き方
鵜飼 文敏●グーグル株式会社
本付録は日本語版オリジナルの記事です。本稿ではGoのイディオムについて解説します。本書で使われているコードを、よりGoのイディオムに沿った形で書きなおしてみます。
B.1 traceパッケージ
1章のtrace
パッケージは次のようなコードでした。
package trace import ( "fmt" "io" ) // Tracerはコード内での出来事を記録できるオブジェクトを表すインタフェースです。 type Tracer interface { Trace(...interface{}) } type tracer struct { out io.Writer } func (t *tracer) Trace(a ...interface{}) { t.out.Write([]byte(fmt.Sprint(a...))) t.out.Write([]byte("\n")) } func New(w io.Writer) Tracer { return &tracer{out: w} } type nilTracer struct{} func (t *nilTracer) Trace(a ...interface{}) {} // OffはTraceメソッドの呼び出しを無視するTracerを返します。 func Off() Tracer { return &nilTracer{} }
このコードではTracer
をインタフェースとして定義し、tracer
もしくはnilTracer
をその実装として定義しています。このコードはうまく書かれているように思えますが、まずインタフェースありきのAPIというのは改善の余地があります。 ...
Get Go言語によるWebアプリケーション開発 now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.