---
# System prepended metadata

title: FX framework - dependency injection
tags: [Golang]

---

---
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有很多優點，但也有很少的缺點：
---
依賴注入建立客戶端，要求構建程式提供配置詳細資訊。 當有明顯的預設值可用時，這可能會很困難。
依賴注入可能會使程式難以跟蹤（讀取），因為它將行為與構建分開。 這意味著開發人員必須參考更多檔案來跟蹤系統的執行方式。
它需要更多的前期開發努力。