付録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.