dqs13465424392 2017-12-07 03:52
浏览 115

在Golang中复制非空结构值以更新数据存储区

I'm writing a PATCH API and it is not necessary to send all the fields in request. I'd like to update only the new fields. I'm using Datastore, and I think, I need to send entire struct that contains the final value I intend to save, as it replaces all the values. I retrieve existing values from DB in one struct and I have the request in another struct.

type product struct {
    TITLE    string `json:"title"`
    SUMMARY  string `json:"summary"`
    IMAGEURL string `json:"imageUrl"`
    CATEGORY string `json:"category"`
    TYPE     int    `json:"type"`
}

var dbVal product // Holds the existing DB values
var formVal product // Holds the values received from web form (api request)

formVal need not have all the values. It is empty if the field is not sent in the request.

I want the dbVal struct to be updated with the values in formVal ONLY if formVal field is not empty (!= "" for string or != 0 for int).

PS: I searched for more than a day and tried different examples and tried to use reflect from some of the other answers, but not able to find out how to assign values to another struct. If this is already answered, I'm sorry for reposting this - please share the link.

  • 写回答

2条回答 默认 最新

  • doutui7955 2017-12-07 11:16
    关注

    I would propose lightly change the struct to use pointers:

    type product struct {
        TITLE    *string `json:"title"`
        SUMMARY  *string `json:"summary"`
        IMAGEURL *string `json:"imageUrl"`
        CATEGORY *string `json:"category"`
        TYPE     *int    `json:"type"`
    }
    

    And then you can iterate through the patch entity using reflect and replace non-nil values. Check example in Go Playground.

    评论

报告相同问题?

悬赏问题

  • ¥15 求帮我调试一下freefem代码
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图