首页 > 其他分享 >go使用泛型实现接口通用结构体转换

go使用泛型实现接口通用结构体转换

时间:2024-09-17 16:24:58浏览次数:13  
标签:return IchubResult self 接口 go result func 泛型 PageResult

package pagemodel

import (
    "gitee.com/leijmdas/gobase/goconfig/common/base/basedto"
    "gitee.com/leijmdas/gobase/goconfig/common/base/baseiface"
    "gitee.com/leijmdas/gobase/goconfig/common/base/jsonutils"
    "reflect"
)

func FromResult[T baseiface.IpoolObj](result *basedto.IchubResult) *IchubResult[T] {

    var ichubResult = NewIchubResult[T]()
    return ichubResult.From(result)

}

type IchubResult[T any] struct {
    *basedto.IchubResult
    Data  T   `json:"data"`
    Total int `json:"total"`
}

func DefaultIchubResult[T any]() *IchubResult[T] {
    return NewIchubResult[T]()
}

func NewIchubResult[T any]() *IchubResult[T] {
    var i = &IchubResult[T]{
       IchubResult: basedto.NewIchubResult(),
    }
    i.InitProxy(i)
    return i
}
func (self *IchubResult[T]) NewOfPtrType() T {

    var ptr T
    var objType = reflect.TypeOf(ptr)

    var value = reflect.New(objType.Elem())
    var entity = value.Interface().(T)
    return entity
}
func (self *IchubResult[T]) From(result *basedto.IchubResult) *IchubResult[T] {

    self.IchubResult = result
    self.Data = self.NewOfPtrType()
    jsonutils.FromJson(jsonutils.ToJsonPretty(result.Data), self.Data)

    return self
}
func (self *IchubResult[T]) SuccessData(data T) *IchubResult[T] {
    self.Code = 200
    self.Msg = "成功"
    self.Data = data
    return self
}
func (self *IchubResult[T]) FailMsg(msg string) *IchubResult[T] {
    self.Code = 500
    self.Msg = msg
    return self
}
func (self *IchubResult[T]) ToString() string {

    return jsonutils.ToJsonPretty(self)
}
func (self *IchubResult[T]) String() string {

    return jsonutils.ToJsonPretty(self)
}

package pagemodel

import (
    "gitee.com/leijmdas/gobase/goconfig/common/base/baseiface"
    "gitee.com/leijmdas/gobase/goconfig/common/base/baseutils"
    "gitee.com/leijmdas/gobase/goconfig/common/base/jsonutils"
    "gitee.com/leijmdas/goweb/commonpage/page"
    "gitee.com/leijmdas/goweb/commonpage/pagees"
)

func FromPageResult[T baseiface.IpoolObj](result *page.PageResult) *PageResult[T] {

    var pageResult = NewPageResult[T]()
    return  pageResult.ValueOfPageResult(result) 

}

func FromPageEsResult[T baseiface.IpoolObj](result *pagees.PageEsResult) *PageResult[T] {

    var pageResult = NewPageResult[T]()
    return pageResult.ValueOf(result) 

}

type PageResult[T any] struct {
    *page.PageResult
    Data []T `json:"data"`
}

func DefaultResult[T any]() *PageResult[T] {
    return NewPageResult[T]()
}

func NewPageResult[T any]() *PageResult[T] {
    var pr = &PageResult[T]{
       PageResult: page.DefaultResult(),
    }
    pr.PageResult.InitProxy(pr)
    //pr.IchubClientDto.InitProxy(pr)
    return pr
}
func (self *PageResult[T]) ValueOf(result *pagees.PageEsResult) *PageResult[T]{
    self.PageSize = result.PageSize
    self.PageCurrent = result.PageCurrent
    self.Total = result.Total
    var records []T = make([]T, 0)
    if result.IsSuccess() {
       jsonutils.FromJson(jsonutils.ToJsonPretty(result.Data), &records)
       self.Data = records

    }
    return self
}

func (self *PageResult[T]) ValueOfPageResult(result *page.PageResult) *PageResult[T] {
    self.PageSize = result.PageSize
    self.PageCurrent = result.PageCurrent
    self.Total = result.Total
    var records []T = make([]T, 0)
    if result.IsSuccess() {
       jsonutils.FromJson(jsonutils.ToJsonPretty(result.Data), &records)
       self.Data = records
       for _, record := range self.Data {
          baseutils.IfProxy(record)
       }
    }
    return self
}

func (self *PageResult[T]) Single() bool {
    return false
}

标签:return,IchubResult,self,接口,go,result,func,泛型,PageResult
From: https://blog.csdn.net/leijmdas/article/details/142315761

相关文章

  • 基于django+vue高校毕业论文管理系统【开题报告+程序+论文】-计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着高等教育规模的持续扩大,毕业论文作为衡量学生综合素质与专业能力的重要环节,其管理工作日益复杂。传统的手工管理方式已难以满足当前高......
  • 【开题报告】基于django+vue网上购物商城系统(论文+程序)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,电子商务已成为现代商业活动不可或缺的一部分,极大地改变了人们的购物方式和消费习惯。网上购物商城作为电子商务......
  • 基于django+vue高校毕业班校务管理系统【开题报告+程序+论文】-计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着高等教育规模的不断扩大,高校毕业班管理面临着前所未有的挑战。传统的手工管理方式已难以满足当前复杂多变的校务管理需求,特别是在学生......
  • 基于django+vue高校笔记分享系统【开题报告+程序+论文】-计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景在信息化高速发展的今天,高等教育领域正经历着前所未有的变革。随着知识更新速度的加快和在线学习平台的兴起,学生们对于高效获取、整理与分......
  • 基于django+vue高校班级事务管理系统【开题报告+程序+论文】-计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着高等教育规模的不断扩大与信息技术的飞速发展,高校班级管理面临着前所未有的挑战。传统的手工记录、口头传达等管理方式已难以满足日益......
  • 第十一章 抽象类与接口
    一、抽象类和抽象方法抽象类:使用abstract修饰的类抽象方法:在类中没有方法体的方法,称为抽象方法,抽象方法用abstract修饰抽象类中可以没有抽象方法,包含抽象方法的类必是抽象类如果子类没有实现父类中的全部抽象方法,子类也必是抽象类没有抽象构造方法,抽象类不能被实例化抽象......
  • C++11 线程同步接口std::condition_variable和std::future的简单使用sk
    合集-C++(1)1.C++11线程同步接口std::condition_variable和std::future的简单使用09-17收起std::condition_variable条件变量std::condition_variable有wait和notify接口用于线程间的同步。如下图所示,Thread2阻塞在wait接口,Thread1通过notify接口通知Thread2继续执行。......
  • Go 语言中的空白标识符(_)用法详解
    在Go语言中,空白标识符 _ 有着独特的用途,特别是在循环以及其他一些场景中。本文将详细介绍空白标识符在Go语言中的用法,重点围绕其在循环中的应用以及其他常见场景。 一、空白标识符在循环中的应用 (一)忽略索引值 在遍历切片或数组时,如果我们只关心元素本身而不关......
  • 基于通信协议与技术架构的API接口分类探讨
    API的全称是“ApplicationProgrammingInterface”,意为“应用程序编程接口”API接口的分类:按照技术分WebAPI:基于Web的API,通过HTTP和HTTPS协议与应用程序交互,如RESTfulAPI和SOAPAPI。云API:用于在云计算环境中管理和操作云服务,例如AmazonWebServicesAPI和MicrosoftA......
  • ego-planner开源代码之数据流分析
    ego-planner开源代码之数据流分析1.源由2.测试策略2.1黑盒测试(BlackBoxTesting)2.2灰盒测试(GrayBoxTesting)2.3白盒测试(WhiteBoxTesting)3.后续汇总4.参考资料5.附录5.1rosbag命令操作详细解释和举例1.记录数据:`rosbagrecord`2.播放数据:`rosbagplay`3.......