最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

gorm結(jié)構(gòu)體零值不更新問題及解決方案

 更新時(shí)間:2025年12月31日 10:17:26   作者:水水wwater  
在使用GORM進(jìn)行更新操作時(shí),如果結(jié)構(gòu)體中的零值或空值不被更新,可以通過結(jié)合結(jié)構(gòu)體和map來解決,具體方法是:在更新時(shí),將需要更新的字段放入map中,并判斷字段值是否為零值或空值,如果是,則將該字段值設(shè)置為空字符串或0,此外,更新單行數(shù)據(jù)時(shí),必須在map中包含主鍵賦值

問題描述

在使用gorm的時(shí)候如果用結(jié)構(gòu)體進(jìn)行update或者updates會(huì)出現(xiàn)零值、空值不更新的問題,常見的辦法有兩種:

1.使用Save(),但是Save會(huì)保存所有字段,也就是說,必須將所有字段信息全部獲取才能更新,否則沒有傳值的字段會(huì)更新成空。

2.使用map接口,即map[string]interface{},但是當(dāng)我們使用的是protobuf定義了的結(jié)構(gòu)時(shí),轉(zhuǎn)換成map有些許麻煩。

那么該如何解決呢?

解決辦法

合理結(jié)合結(jié)構(gòu)體和map來達(dá)到可以更新0值的結(jié)果。由于在傳入字段的時(shí)候如果為0值或者空值會(huì)被gorm自動(dòng)忽略,所以在傳入的時(shí)候注意需要傳入一個(gè)可判斷的字段,

例如我在這里讓前端傳的是“無”這個(gè)字符串,判斷是否為“無”字符串,如果是,那么新建一個(gè)map[string]interface{}包含number并賦值為空(或者0)。

然后正常將其他字段更新一遍,再通過map將零/空值字段進(jìn)行更新保存。

	var null sql.NullString
	if object.Number == "無" {
		values := map[string]interface{}{
				"id":          objectTmp.Id,
				"number":      null.String,
		}
		repo.db.Model(&object).Update(objectTmp)//正常更新一遍
		repo.db.Model(&object).Update(values)//將為0值的字段更新一遍
	}

注意:

1. gorm不能傳nil到數(shù)據(jù)庫,只能傳空字符串,所以在數(shù)據(jù)庫里保存的是空字符串。

2. 更新單行數(shù)據(jù)一定要在map里面加上主鍵賦值,否則會(huì)批量更新,在我這里是id。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Golang中的結(jié)構(gòu)體和反射示例詳解

    Golang中的結(jié)構(gòu)體和反射示例詳解

    文章介紹了Go語言中結(jié)構(gòu)體的使用、結(jié)構(gòu)體與JSON數(shù)據(jù)的轉(zhuǎn)換以及反射機(jī)制,反射允許在運(yùn)行時(shí)獲取類型信息、動(dòng)態(tài)調(diào)用方法、訪問屬性和構(gòu)造對(duì)象,文章還提到了使用reflect包來獲取和操作結(jié)構(gòu)體的字段、方法、類型和值,本文結(jié)合實(shí)例代碼介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2025-10-10
  • Go語言中map使用和并發(fā)安全詳解

    Go語言中map使用和并發(fā)安全詳解

    golang?自帶的map不是并發(fā)安全的,并發(fā)讀寫會(huì)報(bào)錯(cuò),所以下面這篇文章主要給大家介紹了關(guān)于Go語言中map使用和并發(fā)安全的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • Golang使用ReverseProxy實(shí)現(xiàn)反向代理的方法

    Golang使用ReverseProxy實(shí)現(xiàn)反向代理的方法

    本文介紹了如何使用Golang的ReverseProxy實(shí)現(xiàn)反向代理,包括源碼結(jié)構(gòu)解析和官方單機(jī)示例NewSingleHostReverseProxy,同時(shí)指出,若要實(shí)現(xiàn)負(fù)載均衡,需要自行開發(fā),還提供了一個(gè)簡單的HTTP服務(wù)用于測試,感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • Go開發(fā)go-optioner工具實(shí)現(xiàn)輕松生成函數(shù)選項(xiàng)模式代碼

    Go開發(fā)go-optioner工具實(shí)現(xiàn)輕松生成函數(shù)選項(xiàng)模式代碼

    go-optioner?是一個(gè)在?Go?代碼中生成函數(shù)選項(xiàng)模式代碼的工具,可以根據(jù)給定的結(jié)構(gòu)定義自動(dòng)生成相應(yīng)的選項(xiàng)代碼,下面就來聊聊go-optioner是如何使用的吧
    2023-07-07
  • go語言題解LeetCode506相對(duì)名次示例詳解

    go語言題解LeetCode506相對(duì)名次示例詳解

    這篇文章主要為大家介紹了go語言題解LeetCode506相對(duì)名次示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Go語言拼接URL路徑的三種方法

    Go語言拼接URL路徑的三種方法

    本文主要介紹了Go語言拼接URL路徑的三種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • go中使用curl實(shí)現(xiàn)https請(qǐng)求的示例代碼

    go中使用curl實(shí)現(xiàn)https請(qǐng)求的示例代碼

    本文主要介紹了go中使用curl實(shí)現(xiàn)https請(qǐng)求的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-06-06
  • golang time包做時(shí)間轉(zhuǎn)換操作

    golang time包做時(shí)間轉(zhuǎn)換操作

    這篇文章主要介紹了golang time包做時(shí)間轉(zhuǎn)換操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • GOLang判斷進(jìn)程是否存在實(shí)現(xiàn)方式

    GOLang判斷進(jìn)程是否存在實(shí)現(xiàn)方式

    該文主要介紹了使用Go語言編寫進(jìn)程檢測工具的方法,由于Go語言本身沒有直接獲取進(jìn)程信息的功能,作者決定通過執(zhí)行命令的方式實(shí)現(xiàn),最終給出了優(yōu)化后的代碼示例
    2026-04-04
  • Go語言開發(fā)實(shí)現(xiàn)一個(gè)圖片批量壓縮工具

    Go語言開發(fā)實(shí)現(xiàn)一個(gè)圖片批量壓縮工具

    在日常開發(fā)和辦公中,圖片體積過大會(huì)帶來不少困擾,本文將使用Go語言編寫一個(gè)圖片批量壓縮工具,文中的示例代碼講解詳細(xì),需要的可以了解下
    2025-09-09

最新評(píng)論

阳曲县| 安吉县| 灵石县| 夹江县| 容城县| 安塞县| 通山县| 新建县| 称多县| 会宁县| 靖州| 永寿县| 卓尼县| 古田县| 嘉峪关市| 靖江市| 新田县| 锡林郭勒盟| 华容县| 吴忠市| 定远县| 徐汇区| 灵川县| 新竹市| 密云县| 石泉县| 奇台县| 古浪县| 永新县| 山东省| 盘锦市| 淳安县| 澜沧| 蒲江县| 泾源县| 尼木县| 略阳县| 汝阳县| 托克逊县| 方山县| 长葛市|