先定义一个内部调用接口 用于后面的注入
// 被 注入的接口 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是接口类型 }
标签:依赖,UserFace,Get,接口,Golang,调用,SysUser,注入 From: https://www.cnblogs.com/yingger/p/18246970