什么是依赖注入
依赖注入是软件开发中的设计模式,它的核心思想是将依赖关系,从使用者转移到调用者,有调用者控制使用者需要的依赖对象,这样有助于我们开发出低耦合的代码。
依赖注入不是编码的目标,它是为了达到低耦合的一种手段。
golang实现的步骤
- 抽象,定义接口
- 建立接口具体实现
- 设计传入依赖项的方法
- 使用注入的依赖
代码展示
### 假设要实现一个消息通知服务,支持不同的模块。常规写法:
type Email struct {}
func (e *Email) Send(msg string) error {
fmt.Printf("Email Send, msg: %s \n", msg)
return nil
}
type SMS struct {}
func (sms *SMS) Send(msg string) error {
fmt.Printf("SMS Send, msg: %s \n", msg)
return nil
}
func sendMsg(msg string, channel string) error {
if channel == "email" {
e := new(Email)
return e.Send(msg)
}
if channel == "sms" {
sms := new(SMS)
return sms.Send(msg) 、
}
return errors.New("Invalid Channel:" + channel)
}
func main() {
sendMsg("hell