名前空間が平らになっていく

GoでCLIツールを作ってるのを見ると大体Clientの型を定義して、それをレシーバーにしたメソッドを生やすというスタイルになってるように思う。
でもサブコマンドぐらいだったらそれでよいんだけど、サブサブコマンドぐらいになってくるとファイルがごちゃごちゃして来るのが想像に難くないので、初期の段階からディレクトリを分けてパッケージを分けるようにしてた。

でもパッケージをまたがったレシーバーにメソッドが生やせないので、Client型のレシーバーのような表現ができなくて、引数で引き回すしかなく、これはこれでどうもGoっぽくない。無理矢理に構造体の埋め込みで型を変換してみたりするのも試してみたけど、型変換のコードが至る所にでてきてこれもなんだか違う感。

他の人が書いたGoのコードを眺めてると結構平らなパッケージが多いので、そういうもんだとあきらめてパッケージを平らにしよう。
名前空間が分けられないのだけが気になるのだけど。細かいヘルパ関数的なのも雑多に突っ込んでみて、数が多くなってから共有処理的なを分離することを考えよう。

色々リファクタリングしながらコードをこねくり回してしっくり来るところを手探りで探す感じ。