マイクロサービスの定義としては
「あるサービスが、独立した小さなサービスの集合で構成される」
というのが一般的?で、俺もそう思っている。

Goはこのマイクロサービス的なサービス開発に適している気がする。

ワンバイナリ=サービスの単位

Goの最大のメリットと考えているのは、
ビルドしたら実行可能なバイナリが1個吐き出されて、ミドルウェア等の設定が不要。
というのは、過去にも書いた。

この実行可能なバイナリをマイクロサービスでいうところの「小さなサービス」とすると、とてもしっくり来る感じ。

バイナリ=Goパッケージ=サーバインスタンスの単位

  1. API
  2. Batch A
  3. Batch B
  4. Proxy(image)

で構成されるサービスがあったとして、全部Goで書いたとする。
それぞれがGoプロジェクトの1パッケージに対応し、そのパッケージ毎にバイナリを生成し、 バイナリごとにサーバインスタンスを割り当てる感じになる。

まさにマイクロサービス。

まとめ

GoはProxyサーバみたいな特定の用途に特化した(アドホックな)処理を、 1個のバイナリとしてまとめられるので、Goで全部やってると勝手にマイクロサービスっぽくなるよね
というお話。