[Go] uber-go/fx で curl もどきを作ってみる
2024-12-18
uber-go/fx は Go の DI ライブラリ。 プログラム実行開始時に依存を決定するタイプ。 どちらかというとフレームワークに近く、アプリケーション全体で導入するのが望ましい。 学習コストがほんのちょっとあり、自分の理解を整理するためにもサンプルアプリを作ってみた。
curl ライクな CLI を作ってみる。 とは言っても GET しかできない。 curl とは似ても似つかないが、まあサンプルなので良いと思う。
ターミナル
$ go run . -url https://example.com/
<!doctype html>
<html>
<head>
<title>Example Domain</title>
// 省略
// example.com へ HTTP GET リクエストをして、レスポンスボディを標準出力する
</>
-
- └
- └
-
- └
- └
cmdfx.Module と clientfx.Module があり、両者を fx.New() でロードしている。
cmdfx.New() を見ると分かる通り、cmdfx.ICmd は clientfx.IClient へ依存している。 この依存の注入を fx がしてくれる。 cmdfx と clientfx は interface を介してやり取りしているのがポイント。 これにより例えば mock へ差し替えできる。