go-wire

zhaoqiang1980發表於2024-09-03

在main包下,建立wire.go
在內部隨便建立func方法,內部要包含wire.Build()
裡面為對應的構造器函式。可以透過wire.Newset()將多個Provider函式串聯一起(之間不一定有關係),然後觸發wire.Build呼叫。如果有全域性要使用的物件,可以使用wire.Value定義(僅針對物件)。且這種物件需要透過指標傳遞,否則要麼提示找不到,要麼提示重複了。
wire.go

type AppInfo struct{

}


func myWire(test *Test){
 appInfo := &AppInfo{}
 
 wire.Build(ServiceProvider, NewConfigService,wire.value(appInfo))

}

main.go

// 在需要初始化執行時,觸發此方法裝載。即wire僅是幫你生成了依賴關係的程式碼,還需要自己呼叫。
對於方法中的入參項,會在物件構建時,自動填入
myWire(&test)

service.go

ServiceProvider := wire.NewSet(NewUserService)

注意事項

wire物件的地址引用

如果方法中引入的是一般的構造器使用比較隨意,如果是物件要使用指標指向,否則要麼沒有,要麼說是多個型別。

執行

當執行wire後,成功時會生成wire_gen.go檔案。

windows使用者,需要在git的工具中執行,windows自有控制檯不可以