チャットアプリ

RailsチュートリアルでもTDD推奨でしたが、この書籍では「ここまで細かく段階を分けて作っていくものなのか?」と思いました。

var buf bytes.Buffer
tracer := New(&buf)
...

まずこのようなテストを書きます。
戻り値についても型宣言もしていません。

それからテストを実行し。
New関数がないので作り。
またテストを実行し。
引数を受け取れないので受け取れるようにし。
またテストを実行し。
戻り値を戻していないので、Tracerインタフェースを定義し、それを戻すようにし。
といった感じです。

少し驚き不安になりました。
今までの自分のプログラミング経験や、特にElmですと、自分は型から作っていった記憶があるからです。
(勘違いかも)

頭の中でどこまで出来上がっているかなどにもよると思うのですが、
関数 -> インタフェース -> 公開しない構造体
といった手順に見えました。

インタフェースも型といえば型なのかもしれませんが、関数の集まりを宣言しているようなもので、文章化が難しいのですが少し不思議です。

結局このパッケージは外部に構造体は出していません。

手続き型言語は関数から、関数型言語はデータからという傾向でもあったりするんでしょうか?

監訳者版tracer.goも日本の書籍にだけ載っているのですが、こちらではインタフェースは使わずにもっとシンプルです。

メソッドのレシーバをポインター型にするかどうかという判断も自信が持てません。

なんだか悩ましいところです。

引数をインタフェースにすることのほうが重要で、戻り値はそこまで重要ではないような気がします。