Go 如何在BD中仅更新my struct中填写的字段?
我有一个结构从用户那里获取数据并更新数据库中的信息。但是,如果用户允许字段为空,则数据库中的对应字段将为空。我不想这样,我只想编辑用户通知的字段 我的模型:Go 如何在BD中仅更新my struct中填写的字段?,go,Go,我有一个结构从用户那里获取数据并更新数据库中的信息。但是,如果用户允许字段为空,则数据库中的对应字段将为空。我不想这样,我只想编辑用户通知的字段 我的模型: type Business struct { Id uint64 `json:"id,omitempty"` Company_name string `json:"company_name,omitempty"` Trading_name string `j
type Business struct {
Id uint64 `json:"id,omitempty"`
Company_name string `json:"company_name,omitempty"`
Trading_name string `json:"trading_name,omitempty"`
Facebook string `json:"facebook,omitempty"`
Instagram string `json:"instagram,omitempty"`
Tel string `json:"tel,omitempty"`
User_id uint64 `json:"user_id,omitempty"`
}
我的控制器:
func EditBusinessInfo(w http.ResponseWriter, r *http.Request) {
params := mux.Vars(r)
businessIDParams, err := strconv.ParseUint(params["businessID"], 10, 64)
if err != nil {
returns.ERROR(w, http.StatusBadRequest, err)
return
}
userIDInToken, err := auth.ExtractUserID(r)
if err != nil {
returns.ERROR(w, http.StatusInternalServerError, err)
return
}
db, err := db.ConnectToDB()
if err != nil {
returns.ERROR(w, http.StatusInternalServerError, err)
return
}
defer db.Close()
repository := repositories.NewUsersRepository(db)
businessInBD, err := repository.GetBusiness(businessIDParams)
if err != nil {
returns.ERROR(w, http.StatusInternalServerError, err)
return
}
if userIDInToken != businessInBD.User_id {
returns.ERROR(w, http.StatusUnauthorized, errors.New("você não pode editar a empresa de outra pessoa"))
return
}
if businessIDParams != businessInBD.Id {
returns.ERROR(w, http.StatusForbidden, errors.New("essa empresa não peertence a você"))
return
}
bodyRequest, err := ioutil.ReadAll(r.Body)
if err != nil {
returns.ERROR(w, http.StatusBadRequest, err)
return
}
var business models.Business
if err := json.Unmarshal(bodyRequest, &business); err != nil {
returns.ERROR(w, http.StatusUnprocessableEntity, err)
return
}
if err := repository.EditBusinessInfo(userIDInToken, business); err != nil {
returns.ERROR(w, http.StatusInternalServerError, err)
return
}
returns.JSON_RESPONSE(w, http.StatusOK, nil)
}
int和string都有默认值,因此如果不给它们赋值,它们将被默认值0或0填充。因为它们总是有一个赋值,所以省略空标记永远不会起作用 这个问题的一个常见解决方案是将结构字段设置为指针,如果没有设置指针,则指针为零。然后,nil值将触发json封送拆收器识别空标记。当您插入DB时,这些值也将为null/nil 您应该评估哪些字段需要值,以及在数据库存在完整性约束的情况下哪些字段可以为空。在处理数据时,还必须在代码中添加nil检查