gorm 不支持的目标,应该是 slice 或 struct

gorm unsupported destination, should be slice or 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在第一种方式中类型为model.Captcha,那么在Find(&result)中&result类型为*model.Captcha,第二种方式中类型为result*model.Captcha,但是第二种方式有错误?

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

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

请检查 this go tour link 以更好地理解指针。

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