[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 リクエストをして、レスポンスボディを標準出力する
コード
</>
メモ
fx.New()
fx app を立ち上げる
cmdfx.Module と clientfx.Module があり、 両者を fx.New() に渡している。
エントリポイント
実処理
Module
ファクトリ関数を fx に登録
cmdfx.New()
ファクトリ関数。clientfx.IClient へ依存している。 fx は関数のシグネチャを見て依存関係を構築する。
cmdfx と clientfx は interface を介してやり取りしている。これにより mock へ差し替えできる