GO es数据准备DB copy生成泛型解决重复代码

每个es的代码

//bulkRequest := es.GetElastic1().Bulk()
var qq=facade.Default[*esentity.NotesEs]()
for _, note := range notes {
    noteEs := &esentity.NotesEs{}
    noteEs.EntityFillEs(note)
    //index1Req := elastic.NewBulkIndexRequest().Index(esentity.NotesEs{}.AliasName()).Id(utils.FormatInt(noteEs.Id)).Doc(noteEs)
    //bulkRequest = bulkRequest.Add(index1Req)
    qq.AddDocObject(noteEs)
}
//bulkResponse, err := bulkRequest.Do(context.TODO())
var ret= qq.BulkIndex()
if ret.IsFailed() {
    golog.Error(ret)
}
if ret.Data==nil {
}

泛型 接口通用写法

facade.EsBulkIndex[entity.Notes,*esentity.NotesEs](notes)

方法通用实现
func EsBulkIndex[E schema.Tabler, T esiface.EsObjectStru[E]](entities []*E) bool {
    var qq = Default[T]()
    for _, entity := range entities {

       var esObj = esiface.NewOfPtrEsObject[T]() //gconv.Struct(entity, esObj)
       esObj.EntityFillEs(entity)
       qq.AddDocObject(esObj)
    }
    ret := qq.BulkIndex()
    if ret.IsFailed() {
       golog.Error(ret)
    }
    if ret.Data == nil {
       golog.Error("expected bulkResponse to be != nil; got nil")
       return true
    }
    return false
}
type EsObjectStru[E any] interface {
    EsObject
    EntityFillEs(entity *E)
}
type EsObject interface {
    Unmarshal([]byte) error

    IndexID() string
    TableName() string
    IndexName() string
    AliasName() string
    GetMapping() string

    Mapping() string
    InitDoc() EsObject
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

leijmdas

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值