--- title: FX framework - dependency injection --- # FX framework - dependency injection ###### tags: `Golang` 什麼是Fx? 根據Uber釋出的官方檔案,Fx是Go的應用程式框架: 使依賴性注射變得容易。 消除了對全域性狀態和func init()的需求。 Fx使用建構函式注入模式,讓我們試著瞭解它是如何使Go中的依賴注入變得容易的。 ## 使用fx 在啟動配置時,將需要啟動的服務放入fx.provider(),並且將接收回傳類型放入fx.Populate(),再來用app.start即可簡單啟用fx框架,算是相當簡便,開箱即用 ``` var config2 *config.GlobalConfig2 var psql2 *sql.DB func StartServer2() { app := fx.New( fx.Provide(config.LoadGlobalConfig2), fx.Populate(&config2), fx.Provide(psql.InitPsql2), fx.Populate(&psql2), ) if err := app.Start(context.Background()); err != nil { fmt.Println(err) } } ``` 下面我的範例代碼,放入了使用DI與不使用DI的比較,未來可以再回顧: https://github.com/ronnielin8862/go-practice/blob/master/globle/start_server_test.go 參考文章: https://studygolang.com/articles/18100 雖然DI有很多優點,但也有很少的缺點: --- 依賴注入建立客戶端,要求構建程式提供配置詳細資訊。 當有明顯的預設值可用時,這可能會很困難。 依賴注入可能會使程式難以跟蹤(讀取),因為它將行為與構建分開。 這意味著開發人員必須參考更多檔案來跟蹤系統的執行方式。 它需要更多的前期開發努力。