goのDIライブラリ比較メモ
DIライブラリでやりたいこと
A -> B -> C 見た良いな依存関係を自動で解決させたい
A -> B -> C で、結合テストをする時に、C をモックして A のテストをする、といったことができるとなお柔軟
table:気になったライブラリまとめ
ライブラリ名 star メモ
使ってみる
defval/di
uber-go/fx
star 5k
uber-go/dig
メモ
wire
Google 製
ちょっと特殊なコードを書いた↑で go generate するとDIのコードが生成される
自動生成がちょっと面倒だが、go generate の時のエラーで記述ミスに気づける
dig
fx
Uber製
参考
wire
README の通りに使っていく
go get ではなくて、go install して使う
code:sh
go install github.com/google/wire/cmd/wire@latest
コンパイル時DI
コンパイル時にDIの設定不備がわかる
code:go
// service から Repository を使っている
type Service struct {
repo Repository
}
func NewService(repo Repository) Service {
return Service{repo: repo}
}
func (s Service) Show() {
num := s.repo.Get()
fmt.Println(num)
}
// domain repository
type Repository interface {
Get() int
}
type RepositoryImpl struct {
}
func NewRepositoryImpl() RepositoryImpl {
return RepositoryImpl{}
}
func (r RepositoryImpl) Get() int {
return 1
}
GoのDIライブラリgoogle/wireの使い方 - 一休.com Developers Blog
go generate のステップは必要になってしまう
do
嫌いではない気がする
dig
ちょっと違う気もする...
di
なんか良さげではある
fx
一回使ってみてもいいかも
DIコンテナというより、WebフレームワークっぽいものにDIが同梱されている感じ...?