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数据到结构。
我这样用的时候没有报错
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数据到结构。