背景 本記事では、Rob Pike 氏と Dave Cheney 氏により記述された「Functional Option Pattern」の拡張について説明したいと思います。このパターンに慣れていない人は、まず彼らの記事を読むことをおすすめします。 問題 このパターンの限界を見るために、etcd v3 client について考えてみます。特に、key-value の値を取得したり登録したりするための API である KV インターフェースに着目してください。例えば、Get の API はこのような形です: Get(ctx context.Context, key string, opts ...OpOption) (*GetResponse, error) ここで、opts は functional options のリストです。この API を呼び出すには、以下のように書きます: res
![Go API のための再利用可能で型安全なオプションの実装方法 - Frasco](https://cdn-ak-scissors.b.st-hatena.com/image/square/50f8e201d6c9830aa189aee870486ea91315d6ec/height=288;version=1;width=512/https%3A%2F%2Fstorage.googleapis.com%2Fdoha-api%2Fuploads%2F2017%2F10%2F30%2Ffiveyears.jpg)