January 2016
Beginner to intermediate
280 pages
4h 10m
Japanese
鵜飼 文敏●グーグル株式会社
本付録は日本語版オリジナルの記事です。本稿ではGoのイディオムについて解説します。本書で使われているコードを、よりGoのイディオムに沿った形で書きなおしてみます。
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というのは改善の余地があります。 ...
Read now
Unlock full access