[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 へ差し替えできる。