goでfunctional optionsを使う場合には、こういう感じで書かれていると嬉しいという話。

今日は素朴な話。functional optionsの利用者がこういう感じでコードを書いてくれると嬉しいよという話。

functional options ?

goでわりと有名なデザインパターン(?)。

初出はこの辺り。ただ最近利用されているのはここに書かれている内容を簡略化した亜種のようなものだと思う。

解説はこの辺りが丁寧。

日本語だとこの辺り(?)。正直な所テキトーにググってみて幾つか覗いてみるのが一番手軽だと思う1

まぁ今回の記事はfunctional optionsが分かっていること前提の話で。

こう書いてくれると嬉しい

いつもはライブラリの提供者側のことが多いのだけれど。今回はライブラリの利用者側の立場からの話(生産者と消費者の消費者側)。

functional optionsというのは一言で言うと「コードを調整可能」にするパターンだと思っている。そういうわけで、調整のしやすさが担保されていると便利ということになる。

いつもはコードのスタイルについて口うるさく言いたい方ではないのだけれど2。functional optionsに関してはこうして欲しいと言うような要望が出てきた。

それはこういう形にして欲しいということ。下のようなコードだと嬉しい。

UseOptions(
    config,
    WithFoo(),
    WithBar(xxx),
    WithBoo(yyy),
)

逆に言うとこういう形だと嬉しくない。一行で全部書かれているようなもの

UseOptions(config, WithFoo(), WithBar(xxx), WithBoo(yyy))

理由は単純でオプション部分を手軽に増減させたいから。調整可能ということはいじりやすくなっているべきという話だし。emacsなら Ctrl + kvim なら dd でなど1行まるっと消す操作というのは一般に標準装備3。その1行まるっと消す操作で不要なオプションなどが消せると便利だよね嬉しいという話でした。


  1. オススメの記事見つけたら教えてください :pray:

  2. gofmt使ってねくらい

  3. もう少しモダン(?)なエディタの例も載せたいですね。。