博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
gorm如何巧妙的定义model模型
阅读量:3986 次
发布时间:2019-05-24

本文共 2575 字,大约阅读时间需要 8 分钟。

在接口开发中,很多时候返回的数据是基于一个数据表的,但是又不仅限与该表的字段,由于golang是强类型的语言,于是这个model就显得不好设计了。

比如想要返回类似于这样的数据:

{
"code": 0, "data": {
"id": 0, "name": "TP-01", "votestart": 1599580800000, "voteend": 1606751999000, "start_url": "", "config_list": {
"category_name": "全部1", "color_list": [ "#6AE0D0", "#31947E" ], "digital_code": 0, "mv_name": "视频2222", "phone_login": 1, "select_max": 20, "show_share": 1, "vote_rule": "1", "vote_type": 1, }, "status": 1, "ext": "", "product_num": 0, "category_list": [ {
"id": 10, "name": "少年组" }, {
"id": 11, "name": "中年组" }, {
"id": 12, "name": "老年组" } ] }, "msg": ""}

很显然一个普通的model是无法满足这个需求的。

于是定义了如下的结构体:

type Vote2ActivityModel struct {
Id int `json:"id" primaryKey:"true"` Name string `json:"name"` VotestartStr string `json:"-" gorm:"column:votestart"` VoteendStr string `json:"-" gorm:"column:voteend"` Votestart int64 `json:"votestart" gorm:"-"` Voteend int64 `json:"voteend" gorm:"-"` StartUrl string `json:"start_url"` ConfigListStr string `json:"-" gorm:"column:config_list"` ConfigListMap interface{
} `json:"config_list" gorm:"-"` Status int `json:"status"` Ext string `json:"ext"` ProductNum int `json:"product_num"` CategoryList interface{
} `json:"category_list" gorm:"-"`}

说明:

json:"-"				表示此结构体字段,在转换成json串的时候,过滤掉此字段。json:"votestart"		表示此结构体字段,对应json串中的votestart字段。gorm:"column:votestart"	表示此结构体字段,对应数据表的votestart字段,在查询的时候需要严格匹配字段类型,并填充数据,如果类型不匹配将会报错。gorm:"-"				表示此结构体字段,不需要匹配数据表的任何字段,因此你可以定义为任何复杂的数据类型。

字段说明:

1、votestart
在数据表中存储的是字符串 2020-09-17 00:00:00 ,但是需要返回整型的,于是便有了

VotestartStr  string      `json:"-" gorm:"column:votestart"`Votestart     int64       `json:"votestart" gorm:"-"`

先将votestart加载到VotestartStr,然后转换成整型填充到Votestart,最终只导出Votestart即可。

2、config_list

在数据表中config_list存储的是json串,但是需要json.Unmarshal之后再返回,于是便有了

ConfigListStr string      `json:"-" gorm:"column:config_list"`ConfigListMap interface{
} `json:"config_list" gorm:"-"`

3、category_list

是关联的另一张表的数据。

CategoryList  interface{
} `json:"category_list" gorm:"-"`

不一定都要使用interface{}来替代,如果明确知道类型,最后填对应的类型,这样这个模型在使用起来会更方便。

转载地址:http://ocaui.baihongyu.com/

你可能感兴趣的文章
S3C2440 USB 设备控制器(转)
查看>>
Linux usb 设备驱动 (1)
查看>>
Linux usb设备驱动(2)---> usbmouse.c 源码分析
查看>>
USB芯片
查看>>
ajax工作原理
查看>>
理解Sharding jdbc原理,看这一篇就够了
查看>>
XiaoMi面试题记录
查看>>
解决跨网场景下,CAS重定向无法登录的问题(无需修改现有代码)
查看>>
java反编译命令
查看>>
activemq依赖包获取
查看>>
版本号中Snapshot的含义
查看>>
JAVA 成员访问权限修饰符
查看>>
Centos下Mysql密码忘记解决办法
查看>>
概念区别
查看>>
关于静态块、静态属性、构造块、构造方法的执行顺序
查看>>
final 的作用
查看>>
在Idea中使用Eclipse编译器
查看>>
idea讲web项目部署到tomcat,热部署
查看>>
centos 防火墙关闭/开启
查看>>
HASHMAP 深入解析
查看>>