dongpo2002 2019-04-06 17:10
浏览 10

如何确定需要从修改后的结构更新哪些数据库表列?

The problem that I am facing is more of a code design rather than specifically go related. I am building a simple CRUD application and everything seems to go nice and easy except the updating part: I have a struct type as simple as:

type User struct {
   ID string
   Name string
   Password string
}

and an interface for data storage layer:

type Store interface {
    ...
    Update(user *User) error
    ...
}

The problem is that with most database drivers you can't just pass the whole struct instance and hope the their system knows which fields were modified, the whole document/row gets replaced. How should I track which fields were modified (so that I could update them in the storage layer accordingly)? Maybe pass all the fields I would like to modify to the Update function as a map of interface{}?

  • 写回答

1条回答 默认 最新

  • dousi1097 2019-04-06 18:31
    关注

    There are plenty of ways to achieve that. For example you can use setters to change the values.So you can keep track of updated fields. like so :

    type User struct {
       ID string
       Name string
       Password string
       updateFields map[string]bool
    }
    
    func (u *User) SetName(name string) {
       u.Name = name
       updateFields["name"] = true
    }
    

    You can use more automated way by reflection.

    评论

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)