去 GORM db.Automigrate

标签 go variadic-functions go-gorm

我使用 Go-GORM 连接到 cockrouch 数据库集群。我写了一个辅助函数来处理连接和自动迁移部分。一切正常,除非我想自动迁移超过 1 个模型。

err = helperdb.HandleMigrate(db, models.Resource{}, models.Right{})
if err != nil {
    helperlog.Log("Clavem", "HandleMigrate", "Error migrating resource:"+err.Error())
    return
}

这是辅助函数:

// HandleMigrate ...
func HandleMigrate(db *gorm.DB, models ...interface{}) error {

// this need to be checked
err := db.AutoMigrate(models).Error
if err != nil {
    fmt.Println("Error HandleMigrate:" + err.Error())
    return err
}

return nil

我收到以下错误:

pq: empty table name: "\"\""

当我直接调用 gorm.DB.AutoMigrate(&models.Resurce{}, models.Right{}) 时,我没有收到任何错误。

我知道我不需要辅助函数,但我想知道为什么辅助函数不起作用,尤其是因为这是我第一次使用可变参数函数。

谢谢 :)

最佳答案

很确定你只需要做:

err := db.AutoMigrate(models...).Error

可变参数函数将参数作为类型的一部分接收。在这种情况下,您的函数接收一个名为 models[]interface{}。当您将该参数传递给 db.AutoMigrate 时,您将其作为 []interface{} 类型的单个参数传递。

您真正想要的是将 args 中的每个值作为单独的参数传递(与您接收它们的方式相同)。为此,您必须使用 ... 语法。

关于去 GORM db.Automigrate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46654132/

相关文章:

go - 对多次组合的对象进行类型断言

arrays - 编码/十六进制 : invalid byte: U+0068 'h' Golang

python - Golang 中的并发服务器

C - 从 va_arg 中检索 int 数组的值

objective-c - 为什么某些 Cocoa 方法中的参数列表以 nil 结尾?

go - Updates() 似乎没有更新关联

go - 从 docker 容器内运行 goconvey http 服务器

c - C 函数中未指定数量的参数 - void foo()

go - 使用 GORM 从 Postgresql 检索表名称

json - Golang GORM 和将 HTTP.Request.Body 解码为 JSON