参考文章 控制反转(IoC)与依赖注入(DI) 指出了依赖注入可以降低程序的耦合性。能更好的拆分功能与基础设施。
那么在 golang 中又怎么实现呢?
代码地址 golang-context-ioc.go
MysqlDriver
实现我们所有的数据存取操作。并在全局域中实例化了一个对象 my
。main.go
中创建了一个 ctx := context.Background()
ctx
作为 IoC 容器, 使用 db
作为 key 将 my
对象存放进去。save(ctx)
正常传递 ctxsave()
函数内部, 使用 context 特性, 将 db
对应的对象取出来, 并进行 db.(*MysqlDriver)
断言,还原成 my
实例对象。my
的方法, 例如 my.Save()
进行数据存储操作。至此, context 实现了 IoC 容器的功能。