尝试从模型创建表时出错

冈萨雷斯:

我今天开始玩gorm,但是遇到一些愚蠢的错误并被困在一段时间上,这很糟糕。首先,我在Windows上运行MySQL 5(5.0.51b)和最新版本的go。我确实获得了gorm和mysql驱动程序的支持,并且编译时没有错误,并且可以连接(很可能),但是每当我尝试基于声明的类型创建表时,它都会抛出一个错误的错误消息(因为错误是由MySQL抛出)。这是我的代码:

mport (
    "fmt"
    _ "github.com/go-sql-driver/mysql"
    "github.com/jinzhu/gorm"
)

type User struct {
    id int
}

func main() {
    db, err := gorm.Open("mysql", "root:vertrigo@/shop?charset=utf8&parseTime=True&loc=Local")
    fmt.Println(err)

    a := db.Set("gorm:table_options", "ENGINE=InnoDB").CreateTable(&User{})

    fmt.Println(a)
}

因此,该模型旨在成为非常基础的模型,例如具有一列的表。现在输出:

<nil>&{0x111e2230错误1064:您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以在第1行的')ENGINE = InnoDB'附近使用正确的语法0 0x112d4060 0x112d4000 0x112d8140 0 {0x112a3f20} false map [gorm:table_options:ENGINE = InnoDB] map []}

第一个是连接错误,这意味着它可以连接,但对于查询来说却不是那么好,并且该错误表明除gorm生成的SQL由于某种原因失败外,几乎没有其他内容。因此,问题是,是否有人知道为什么会引发错误以及是否有解决方案。

标记:

尝试创建空表时,会发生该错误,例如:

create table User() ENGINE=InnoDB

gorm会生成一个空表语句,因为User结构的id字段是私有的。

更改id intID int大写 struct字段的第一个字母会将其暴露给外部程序包。


作为第二个问题,不仅仅是打印错误:

db, err := gorm.Open(...
fmt.Println(err)

最好检查每个潜在的错误并立即处理:

db, err := gorm.Open(...
if err != nil {
    log.Fatal(err)
}

对于其他错误,与大多数go代码相比gorm的错误处理有点不寻常。您可能需要经常使用db.GetErrors()检查错误

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章