ソフトウェアに拡張性を持たせる時にプラグイン機構を持たせる事は一般的ですが、それを実現する方法は結構バラバラなのかなと思います。例えば、 C 言語等の.so/.dll を読み込む方法 Nodejs のような言語での単なる import TCP や Unix ソケットを利用して RPC 通信を行う方法 などが有るのかなと思います。1 番目・2 番目は、関数の呼び出し速度等のオーバーヘッドが少なく高速ですが、言語等の制約が大きくなる・メモリを共有することによるセキュリティリスクが発生します。そこで、提供するインターフェースを制約出来る場合は、3 番目の手法が多く使われるようです。 Go 言語で開発されている、hashicorp/terraform cloudfoundry/cli は共に 3 番目の RPC 通信でプラグイン機構を実装しています。その中でも terraform で使用されている
![Go言語で実装するプラグイン機構](https://cdn-ak-scissors.b.st-hatena.com/image/square/b67004f267f62c3a35c7a21e0e562534a7a1d48f/height=288;version=1;width=512/https%3A%2F%2Fblog.kamijin-fanta.info%2Fstatic%2F9c5ff7bad8f3e00ef33f3266015397d2%2F714cf%2Fgo-plugin%25402x.png)