go使用postgreSQL存储数组,Map等

在使用PG数据库时,我们可以将某些数据转换成二进制数据储存到数据库中

type BaseQuestionnaire struct {
	ID         int64     `json:"id"`
	CreateDate time.Time `json:"create_date"`
	Title      string    `json:"title"`
	Describe   string    `json:"describe"`
	SubjectID  int64     `json:"subject_id"`
	Main       []byte    `json:"-" gorm:"type:jsonb"`
	MainObject []Main    `json:"main" gorm:"-"`
}

如以上的结构体,我们的Main在接受前的数据的json字段中使用 "-" 忽略,仅用于gorm的使用,而MainObject在gorm时使用 "-" 忽略,仅用于接受json数据

当然,我们得让这两个字段产生联系

在create时,我们需要将前端数据转成二进制得数据进行存储,如图中得方法所示

func (g *BaseQuestionnairesService) Create(BaseQuestionnaire *model.BaseQuestionnaire) (err error) {
	BaseQuestionnaire.Main, _ = json.Marshal(BaseQuestionnaire.MainObject)
	if err = dao.DB.Create(&BaseQuestionnaire).Error; err != nil {
		return err
	}
	return
}

而在get的时候,我们需将二进制代码转成原来的格式进行返回

func (g *BaseQuestionnairesService) GetById(id int) (BaseQuestionnaire *model.BaseQuestionnaire, err error) {
	BaseQuestionnaire = &model.BaseQuestionnaire{} // 初始化结构体指针

	if err = dao.DB.Where("id = ?", id).First(BaseQuestionnaire).Error; err != nil {
		return nil, err
	}

	var baseQuestionnaire []model.Main
	err = json.Unmarshal(BaseQuestionnaire.Main, &baseQuestionnaire)
	BaseQuestionnaire.MainObject = baseQuestionnaire

	return BaseQuestionnaire, nil
}

当然,在getall和update等一些方法中也要转换数据,切记不要忘记

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值