go - 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
,但是第二种方式有错误?
谁能告诉我为什么,谢谢!
解决方案
您应该将结果定义为result := &models.Captcha{}
,这样您就可以使用.Find(result)
而不使用&
。
请查看此 go tour 链接以更好地理解指针。
当您声明var result *models.Captcha
时,编译器会创建一个 nil 指针,但使用 & 可以生成指向底层模型的指针。Captcha,然后 gorm 可以使用此句柄将 SQL 数据绑定到结构。
推荐阅读
- npm - 通过 package.json 将视觉样式应用于 npm 脚本中使用的 echo 命令
- iis - 您可以在 IIS asp net core 中将 requestTimeout 设置为 1 分钟以下吗?
- python - 当 num epoch 设置为 None 时,tensorflow 训练无休止
- swift - 使用 Swift 在 FireBase 数据库中发生更改时如何获取计数值?
- sql-server - 将数据从 Excel 导入 SQL Server 时如何处理外键
- ios - Alamofire 4 重试器和适配器无法看到更改的 accessToken
- asp.net - Visual Studio 缺少正文元素
- mailchimp - MailChimp 多次发送同一封电子邮件
- mvvm - MVVM,放置/处理 ui 事件的位置,例如“onClick”
- java - 尝试遍历数组中的数组