Go &引用;反映:字段索引超出范围“;更新时出现恐慌
我在用Gorm实现一个基本更新时感到恐慌,我找不到任何关于它的信息。按照Gorm的文档,我看起来并没有做错什么Go &引用;反映:字段索引超出范围“;更新时出现恐慌,go,go-gorm,Go,Go Gorm,我在用Gorm实现一个基本更新时感到恐慌,我找不到任何关于它的信息。按照Gorm的文档,我看起来并没有做错什么 module achiever go 1.15 require ( gorm.io/driver/postgres v1.0.5 gorm.io/gorm v1.20.7 ) 类型任务结构{ ID uint`json:“ID”gorm:“主键”` 标题字符串`json:“标题”` } 类型UpdateTaskInput结构{ 标题字符串`json:“标题”` }
module achiever
go 1.15
require (
gorm.io/driver/postgres v1.0.5
gorm.io/gorm v1.20.7
)
类型任务结构{
ID uint`json:“ID”gorm:“主键”`
标题字符串`json:“标题”`
}
类型UpdateTaskInput结构{
标题字符串`json:“标题”`
}
func UpdateTask(id uint,输入UpdateTaskInput)布尔{
var任务
if err:=models.DB.Where(“id=?”,id).First(&task).Error;err!=nil{
返回错误
}
models.DB.Model(&task).更新(输入)
返回真值
}
我无法找出错误的来源。据我所知,更新不支持“智能选择字段”,因此您需要先构造原始结构
models.DB.Model(&task).更新(&task{Title:input.Title})
我遇到了同样的问题,正如jugendhacker所说:您需要在更新函数中构造模型的结构:
models.DB.Model(&task).Updates(&Task{Title: input.Title})
这在中有说明,如果您正在构建一个API,那么将其作为一个PUT方法来实现就更合适了,因为您正在传递一个新对象,而不是修补一个现有对象。将
ID
字段添加到updateaskinput
结构可以解决此问题
type UpdateTaskInput struct {
ID uint `json:"-"`
Title string `json:"title"`
}
type UpdateTaskInput struct {
ID uint `json:"-"`
Title string `json:"title"`
}