首页 > 解决方案 > gorm 不支持的目标,应该是 slice 或 struct

问题描述

当我使用这种方式时,它没有错误

var result model.Captcha
fmt.Printf("Type: %T", result)
if err := DB.Model(&model.Captcha{}).Where("id = ?", randNum).Find(&result).Error; err != nil{
    return nil, err
}

但是如果我使用以下方式,就会出现错误

var result *model.Captcha
fmt.Printf("Type: %T", result)
if err := DB.Model(&model.Captcha{}).Where("id = ?", randNum).Find(result).Error; err != nil{
    return nil, err
}

result在第一种方式中 type 是model.Captcha,那么&result在 Find(&result) 中类型是*model.Captcha,第二种方式result type 是*model.Captcha,但是第二种方式有错误?

谁能告诉我为什么,谢谢!

标签: gogo-gorm

解决方案


您应该将结果定义为result := &models.Captcha{},这样您就可以使用.Find(result)而不使用&

请查看此 go tour 链接以更好地理解指针。

当您声明var result *models.Captcha时,编译器会创建一个 nil 指针,但使用 & 可以生成指向底层模型的指针。Captcha,然后 gorm 可以使用此句柄将 SQL 数据绑定到结构。


推荐阅读