Go实战全家桶之=====: GO依赖注入框架godi泛型接口、工业级巨匠开发者神器- ******
工业级巨匠开发者 =======
godi di all git clone https://gitee.com/leijmdas/gobase.git
原来需要生成注入代码https://gitee.com/leijmdas/gobase.git
注册时不会生成实例 只是注册了new方法
现在直接调用方法 创建结构体实例
编辑
func (this *TestRedisSuite) Test030_FindBeanFactroy() {
var c1 = basedi.FindBeanGeneral[*goelastic.GoElastic]()
var c2 = basedi.FindBeanGeneral[*goelastic.GoElastic]()
logrus.Info(c1, c2, c1 == c2)
}package baseiface
type IbaseProxy interface {
ISingleton
IBinding
IpoolObj
String() string
ToString() string
ToPrettyString() string
FromJsonAny(body []byte) any
ToJson() string
ToJsonBytes() []byte
ValueOf(another any)
Log()
Clone() any
ContainsType(name string) bool
}type GoElastic struct {
basedto.BaseEntitySingle
client *elasticsearch.Client
Opened bool `json:"opened"`
}
func Default() *GoElastic {
return baseutils.NewOfPtrTypeProxy[*GoElastic]()
}
func NewGoElasticCli() *GoElastic {
return Default()
}
func (self *GoElastic) Init() {
var err error
var esdto = ichubconfig.FindBeanIchubConfig().ReadIchubEs()
golog.Info(esdto)
self.client, err = elasticsearch.NewClient(elasticsearch.Config{
Addresses: strings.Split(esdto.URL, ","),
Username: esdto.Username,
Password: esdto.Password,
})
self.Opened = err == nil
if err != nil {
golog.Error("Error creating the client: ", err)
}
}package basedi
import (
"gitee.com/leijmdas/gobase/goconfig/common/base/baseiface"
"gitee.com/leijmdas/gobase/goconfig/common/base/baseutils"
"github.com/sirupsen/logrus"
"reflect"
)
func FindBeanGeneral[T baseiface.IbaseProxy]() T {
return NewBeanFactroy[T]().FindBeanGeneral()
}
type BeanFactroy[T baseiface.IbaseProxy] struct {
}
func (self *BeanFactroy[T]) FindBeanGeneral() T {
var beanName, err = self.RegisterLoadBean()
if err != nil {
logrus.Error(err)
}
return FindBean(beanName).(T)
}
func (self *BeanFactroy[T]) RegisterLoadBean() (string, error) {
var beanName = self.FindPkgNameOfAny()
var err = RegisterLoadBean(beanName, self.LoadBeanGeneral)
if err != nil {
logrus.Error(err)
}
return beanName, err
}
func (self *BeanFactroy[T]) LoadBeanGeneral() baseiface.ISingleton {
return self.NewOfPtrTypeProxy()
}
func NewBeanFactroy[T baseiface.IbaseProxy]() *BeanFactroy[T] {
return &BeanFactroy[T]{}
}
func (self *BeanFactroy[T]) IfProxy(some any) bool {
if some == nil {
return false
}
if i, ok := some.(baseiface.IbaseProxy); ok {
i.InitProxy(i)
return ok
}
return false
}
func (self *BeanFactroy[T]) NewOfPtrTypeProxy() T {
var ptr T
var objType = reflect.TypeOf(ptr)
if objType.Kind() != reflect.Ptr {
var res = self.NewOfType()
baseutils.IfProxy(res)
res.Init()
return res
}
var value = reflect.New(objType.Elem())
var res = value.Interface().(T)
baseutils.IfProxy(res)
res.Init()
return res
}
// no used
func (self *BeanFactroy[T]) NewOfType() T {
var ptr T
baseutils.IfProxy(&ptr)
ptr.Init()
return ptr
}
func (self *BeanFactroy[T]) FindPkgNameOfAny() string {
var value T
// 使用reflect.TypeOf获取接口的动态类型
ifaceType := reflect.TypeOf(value)
// 检查是否是指针类型
if ifaceType.Kind() == reflect.Ptr {
// 取指针指向的类型
ifaceType = ifaceType.Elem()
}
// 获取类型名称
return ifaceType.Name() + "::" + ifaceType.PkgPath() + "." + ifaceType.Name()
}
func (self *BeanFactroy[T]) FindNameOfAny(value any) string {
// 使用reflect.TypeOf获取接口的动态类型
ifaceType := reflect.TypeOf(value)
// 检查是否是指针类型
if ifaceType.Kind() == reflect.Ptr {
// 取指针指向的类型
ifaceType = ifaceType.Elem()
}
// 获取类型名称
return ifaceType.Name()
}
声明:本网站部分内容来源于网络,版权归原权利人所有,其观点不代表本网站立场;本网站视频或图片制作权归当前商户及其作者,涉及未经授权的制作均须标记“样稿”。如内容侵犯了您相关权利,请及时联系责任编辑(产品)
成员
raymond
@建设家园 ,版权号: - 成交数 --
- 成交额 --
- 应答率
聊天 收藏 点赞
验证
二维码支付