不懂就问, 关于动态类型的疑惑

felixzxk · · 3072 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

**我是个刚写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" BarModelParseQuery = 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获得当前调用通用方法的子类是谁, 如果能在这里明确获得Bar(表结构的结构体类型)就好了 如果能实例化上述结构体就更好了 o2 请问大佬们, 可以做到吗? =============================*/ } .... ```

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3072 次点击  ∙  1 赞  
加入收藏 微博
10 回复  |  直到 2022-07-28 10:37:09
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传