golang 子类调用父类方法, 如何在运行时得知子类的类型?

我是个刚写go的小白, 之前写前端的, 所以以下问题可能比较傻, 如果引起大佬不适请见谅

  1. 写了个web服务, 感觉大部分业务模块的增删改查操作可以通用, 所以在model包里写了个通用的struct;

    package model
    type _model struct {
     TableName string
     ParseQuery func(map[string]any, *gorm.DB) *gorm.DB 
     ...
    }
    func (model Model) GetById(id uint) error {....}
    func (model Model) Create(data any) error {....}
    ....
    // 其他通用的方法
  2. 然后其他各个业务模块都继承这个struct

    // 这个是bar业务模块的文件bar.go
    package model
    // 声明这个业务模块的表结构
    type Bar struct {
     ID          uint   `json:"id,omitempty" gorm:"primarykey;uniqueIndex"`
     Name        string `json:"name,omitempty" gorm:"type:varchar(32);default:NULL"`
     Pid         uint   `json:"pid,omitempty" gorm:"type:int"`
     Status      uint   `json:"status,omitempty" gorm:"type:bytes;default:1"`
    }
    // bar业务模块继承_model
    type barFromModel struct {
     _model
    }
    // 实例化
    var BarModel barFromModel
    func init(){
     BarModel.TableName = "bars"
     BarModel.ParseQuery = func(...)  *gorm.DB {....}
     ...
    }
    // 定义一些该模块特有的方法
    func (model BarModel) MyMethod(){.....}
  3. 在api包中调用model包中的相关方法

    package apibar
    func Create(c *gin.Context) {
     ....
     // 调用通用方法
     err := model.BarModel.Create(.....)
     ....
    }
  4. 问题来了
    如果我想在定义_model的方法时, 明确的知道是哪个模块在调用这个通用方, 并明确的获得此模块的表结构(type), 甚至在通用方法中通用方法中实例化业务模块的表结构

    package model
    type _model struct {
     TableName string
     ParseQuery func(map[string]any, *gorm.DB) *gorm.DB 
     ...
    }
    func (model Model) GetById(id uint) error {....}
    func (model Model) Create(data any) error {
     /*============================
     我想在这里通过 model获得当前调用通用方法的子类是谁,
     假设执行了model.BarModel.Create方法
       如果能在这里明确获得Bar(表结构的结构体类型)就好了
       如果能实例化上述结构体就更好了
     =============================*/
     }
    ....

    o2 请问大佬们, 可以做到吗?

阅读 2.7k
1 个回答
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏