不要使用gorm推送空结构
创始人
2025-01-10 21:30:33
0

在使用gorm进行数据操作时,如果想要避免推送空结构,可以使用gorm提供的Hooks钩子函数来实现。下面是一个示例代码:

package main

import (
	"fmt"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
	"log"
)

type User struct {
	ID   uint
	Name string
	Age  int
}

func (u *User) BeforeSave(tx *gorm.DB) (err error) {
	if u.Name == "" && u.Age == 0 {
		return gorm.ErrEmptySlice
	}
	return nil
}

func main() {
	dsn := "root:password@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True&loc=Local"
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
		Logger: logger.Default.LogMode(logger.Info),
	})
	if err != nil {
		log.Fatal(err)
	}

	err = db.AutoMigrate(&User{})
	if err != nil {
		log.Fatal(err)
	}

	user1 := User{Name: "", Age: 0}
	user2 := User{Name: "Alice", Age: 20}

	err = db.Save(&user1).Error
	if err != nil {
		fmt.Println("Save user1 error:", err)
	}

	err = db.Save(&user2).Error
	if err != nil {
		fmt.Println("Save user2 error:", err)
	}
}

在上面的示例中,定义了一个User结构体,并在结构体上定义了一个BeforeSave钩子函数。在该钩子函数中,判断了NameAge字段是否为空,如果为空,则返回gorm.ErrEmptySlice错误。

main函数中,通过db.Save方法保存了两个用户,一个是空结构体user1,另一个是有数据的结构体user2。当保存user1时,因为NameAge都为空,会触发BeforeSave钩子函数,抛出gorm.ErrEmptySlice错误。而保存user2时,不会触发钩子函数。

通过使用钩子函数,可以实现在保存数据前进行数据校验,避免推送空结构。

相关内容

热门资讯

黑科技科技(wepoke智能a... 黑科技科技(wepoke智能ai)wepower使用说明书(wepOkE)素来是真的有挂(确实有挂)...
黑科技模拟器(wepoke智能... WePoker透视辅助工具核心要点解析‌,黑科技模拟器(wepoke智能ai)wepoke是机器发牌...
黑科技脚本(wepokeai代... 您好,这款游戏可以开挂的,确实是有挂的,需要了解加微【136704302】很多玩家在这款游戏中打牌都...
黑科技辅助挂(wepoke真的... 黑科技辅助挂(wepoke真的有挂)wepoke 软件(wEPOKE)固有真的有挂(有挂猫腻)-哔哩...
黑科技辅助挂(wepoke黑科... 黑科技辅助挂(wepoke黑科技)wepoke软件透明挂演示(wEpOke)一直真的有挂(真的有挂)...
黑科技app(wepoke真的... 此外,数据分析德州()辅助神器app还具备辅助透视行为开挂功能,通过对客户透明挂的深入研究,你可以了...
黑科技智能ai(wepoke辅... 黑科技智能ai(wepoke辅助插件)wepoke软件透明(WEPOke)先前是有挂(果真有挂)-哔...
黑科技模拟器(wepoke透明... 黑科技模拟器(wepoke透明黑科技)wepoke德州扑克用ai代打(WEPOKE)最初存在有挂(有...
黑科技插件(wepoke辅助插... 黑科技插件(wepoke辅助插件)wepoke软件透明(WEPOke)从来是真的有挂(有挂解惑)-哔...
黑科技美元局(wepoke智能... 黑科技美元局(wepoke智能ai)wepoke辅助真的假的(wepoKE)原先真的有挂(竟然有挂)...