[Go] uber-go/fx で curl ライクな CLI を作ってみる

2024-12-18
uber-go/fx は Go の DI ライブラリ。
フレームワークに近く、アプリケーション全体で導入するのが望ましい。

fx はプログラム実行時に依存関係を決定し注入してくれる。
学習コストがほんのちょっとあり、自分の理解を整理するためにもサンプルアプリを作ってみた。
サンプルアプリ
curl ライクな CLI を作ってみる。

とは言っても GET しかできない。
curl とは似ても似つかないが、まあサンプルなので良いと思う。
</>
$ go run . -url https://example.com/
<!doctype html>
<html>
<head>
    <title>Example Domain</title>
    
    // 省略
    // example.com へ HTTP GET リクエストをして、レスポンスボディを標準出力する
コード
</>
1
メモ
fx.New()
fx app を立ち上げる
cmdfx.Module と clientfx.Module があり、
両者を fx.New() に渡している。
エントリポイント
実処理
Module
ファクトリ関数を fx に登録
cmdfx.New()
ファクトリ関数。clientfx.IClient へ依存している。
fx は関数のシグネチャを見て依存関係を構築する。
cmdfx と clientfx は interface を介してやり取りしている。これにより mock へ差し替えできる