我们在开发golang项目代码的时候,都会用到数据数据库工具,现在主流的就是xorm和gorm,然后我们一般会创建数据库表的结构体表单,如下所示:
type Task struct {ID int64 `gorm:"column:id;type:bigint;primaryKey;autoIncrement:false" json:"taskId,string"`SN string `gorm:"column:sn;type:varchar(128)" json:"sn"`Name string `gorm:"column:task_name;type:varchar(128);not null" json:"name"`Company string `gorm:"column:company;type:varchar(128);not null" json:"company"`
}
1、问题
像上面的数据库结构体就是gorm数据库工具创建的表单,对于xorm数据库工具,样子也差不多类似上面的结构体,这个结构体大家都知道是创建表单的结构体,这些数据是用来在数据库里面创建一个含有上面四个字段的数据库表,但是我们有时候会直接使用这个结构体直接返回数据给前端,因为前端需要的也是表单的那些字段的数据,没必要再新建一个一样的结构体,表单里面我们添加了json:"name"这种类似的字段,表示返回给前端间质为name的json数据,但是我们有时候不需要将数据库的其中一个字段返回给前端,不管是因为安全还是其他什么原因,再不重新新建结构体的情况下,返回数据给前端去掉那个字段??怎么做呢
2、解决方法
我们还是用上面的结构体来举例说明解决办法,假如说我们只需要返回给前端,sn,company,name三个字段,而不想把id也返回给前端,那么我们定义结构体把id的json改成横杠-就好了,像下面这样
type Task struct {ID int64 `gorm:"column:id;type:bigint;primaryKey;autoIncrement:false" json:"-"`SN string `gorm:"column:sn;type:varchar(128)" json:"sn"`Name string `gorm:"column:task_name;type:varchar(128);not null" json:"name"`Company string `gorm:"column:company;type:varchar(128);not null" json:"company"`
}
改成上面这样的数据库结构体后,使用结构体返回json数据的时候就没有id这个键值了,方便实用,也不需要重新再新建一个json的结构体数据。