没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
本文介绍了golang不到30行代码实现依赖注入的方法,分享给大家,具体如下: 项目地址 go-di-demo 本项目依赖 使用标准库实现,无额外依赖 依赖注入的优势 用java的人对于spring框架一定不会陌生,spring核心就是一个IoC(控制反转/依赖注入)容器,带来一个很大的优势是解耦。一般只依赖容器,而不依赖具体的类,当你的类有修改时,最多需要改动一下容器相关代码,业务代码并不受影响。 golang的依赖注入原理 总的来说和java的差不多,步骤如下:(golang不支持动态创建对象,所以需要先手动创建对象然后注入,java可以直接动态创建对象) 通过反射读取对象的依
资源推荐
资源详情
资源评论
格式:zip 资源大小:167.1KB
格式:pdf 资源大小:76.8KB 页数:3
格式:pdf 资源大小:49.9KB 页数:2

golang不到不到30行代码实现依赖注入的方法行代码实现依赖注入的方法
本文介绍了golang不到30行代码实现依赖注入的方法,分享给大家,具体如下:
项目地址项目地址
go-di-demo
本项目依赖本项目依赖
使用标准库实现,无额外依赖
依赖注入的优势依赖注入的优势
用java的人对于spring框架一定不会陌生,spring核心就是一个IoC(控制反转/依赖注入)容器,带来一个很大的优势是解耦。一
般只依赖容器,而不依赖具体的类,当你的类有修改时,最多需要改动一下容器相关代码,业务代码并不受影响。
golang的依赖注入原理的依赖注入原理
总的来说和java的差不多,步骤如下:(golang不支持动态创建对象,所以需要先手动创建对象然后注入,java可以直接动态创
建对象)
通过反射读取对象的依赖(golang是通过tag实现)
在容器中查找有无该对象实例
如果有该对象实例或者创建对象的工厂方法,则注入对象或使用工厂创建对象并注入
如果无该对象实例,则报错
代码实现代码实现
一个典型的容器实现如下,依赖类型参考了spring的singleton/prototype,分别对象单例对象和实例对象:
package di
import (
"sync"
"reflect"
"fmt"
"strings"
"errors"
)
var (
ErrFactoryNotFound = errors.New("factory not found")
)
type factory = func() (interface{}, error)
// 容器
type Container struct {
sync.Mutex
singletons map[string]interface{}
factories map[string]factory
}
// 容器实例化
func NewContainer() *Container {
return &Container{
singletons: make(map[string]interface{}),
factories: make(map[string]factory),
}
}
// 注册单例对象
func (p *Container) SetSingleton(name string, singleton interface{}) {
p.Lock()
p.singletons[name] = singleton
p.Unlock()
}
// 获取单例对象
func (p *Container) GetSingleton(name string) interface{} {
资源评论
weixin_38633157
- 粉丝: 5
上传资源 快速赚钱
我的内容管理
展开
我的资源
快来上传第一个资源
我的收益 登录查看自己的收益
我的积分
登录查看自己的积分
我的C币
登录后查看C币余额
我的收藏
我的下载
下载帮助
前往需求广场,查看用户热搜最新资源
- 设计方案PLC自动化控制系统时应遵循的基本原则.doc
- plc课程设计-物业供水系统报告.doc
- 基于51单片机和DS18B20的数字温度计方案设计书.doc
- 物联网技术下的农产品冷链物流配送优化研究.docx
- 信息管理类设计方案:信息管理类专业课程开放式教学平台构建及实践———以“信息服务与用户”课程网站为例.doc
- 水利水电工程项目管理方法探讨.docx
- 2008年7月自学历年考试管理系统中计算机应用试题.doc
- (源码)基于Arduino IDE的物联网设备编程项目.zip
- 《数据库技术与应用》实验指导书.doc
- IBM服务器安装步骤.doc
- 三种服务器虚拟化技术的实现.doc
- PLC在十字路口交通灯控制系统中的应用.doc
- MySQL基本语句和连接字符串JAVA程序员JAVA工程师面试必看.doc
- 大数据时代高职院校科研信息化管理对策研究.docx
- 特殊时期互联网+大学英语混合式教学模式探究.docx
- 探讨高中计算机的有效教学.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功