关于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是接口类型 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
2018-06-13 WebService安全之SoapHeader验证
2018-06-13 WebService上传图片及调用
2012-06-13 关于PageBase页面继承类的写法