關于Golang中的依賴注入實現
先定義一個內部調用接口 用于后面的注入
// 被 注入的接口 type UserFace interface { Get() string Set() string }
然后定義一個 Struct ,開啟構造函數,并實現 上面的 接口
type SysUser struct { Name string } // User的構造函數 func NewSysUser(Name string) *SysUser { return &SysUser{Name: Name} } // 實現接口 UserFace func (u *SysUser) Get() string { return "SysUser.Get" } // 實現接口 UserFace func (u *SysUser) Set() string { return "SysUser.Set" }
定義一個對 外部 (main 或者是 gin可以直接 調用的)調用接口
type MyFace interface { Sum(a int, b int) int }
然后 定義外部Struct 用于實現上面的 外部 調用接口,并且 注入內部調用接口UserFace
// 定義結構體 并注入 UserFace type MyStruct struct { UserFace UserFace // 注入 UserFace } // MyStruct構造函數 func NewMyStruct(face UserFace) *MyStruct { return &MyStruct{ UserFace: face, // 注入 SysUser 系統用戶 } } // 實現接口 MyFace func (ms *MyStruct) Sum(a int, b int) int { getval := ms.UserFace.Get() // 調用 注入的 UserFace 的Get方法 setVal := ms.UserFace.Set() // 調用 注入的 UserFace 的Set方法 fmt.Println("MyStuct調用了UserFace Get: ", getval) fmt.Println("MyStuct調用了UserFace Set: ", setVal) return a + b }
Main 使用 (注意:不能face.UserFace.Get() 這么調,因為UserFace是接口類型,只能在實現 MyFace 接口并注入 UserFace的 MyStruct 里調用 )
func main() { sysUser := NewSysUser("張三") // 定義注入實體 var face MyFace = NewMyStruct(sysUser) // 定義 外部 接口類型 并將實體注入 result := MyFace.Sum(face, 1, 2) // 調用外部接口方法 fmt.Println(result) //face.UserFace.Get() // 注意 不能這么調,因為UserFace是接口類型 }

浙公網安備 33010602011771號