尝试从模型创建表时出错

Error when trying to create tables from model

我今天开始玩 gorm,但不幸的是遇到了一些愚蠢的错误,并坚持了一段时间。 起初我在 windows 和 运行 MySQL 5 (5.0.51b) 和最新版本的 go。我确实得到了 gorm 和 mysql 驱动程序,它编译没有错误并且能够连接(可能),但是每当我尝试根据声明的类型创建 table 时,它会抛出一个错误,这是't 信息(因为错误是由 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)
}

因此该模型的目标是非常基础,例如a table 一列。现在是输出:

< nil > &{0x111e2230 Error 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') ENGINE=InnoDB' at line 1 0 0x112d4060 0x112d4000 0x112d8140 0 {0x112a3f20} false map[gorm:table_options:ENGINE=InnoDB] map[]}

第一个是连接错误,这意味着它能够连接,但是对于查询来说它不是那么好,除了 gorm 生成的 SQL 由于某种原因失败之外,该错误几乎什么也没有说。 所以问题是是否有人知道为什么会抛出错误以及是否有任何解决方案。

尝试创建空 table 时会出现该错误,例如:

create table User() ENGINE=InnoDB

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

id int 更改为 ID intCapitalising 结构字段的第一个字母将其暴露给外部包。


作为次要问题,而不是仅仅打印错误:

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

检查每个潜在的错误并立即处理它们是个好主意:

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

对于其他错误,gorm's error handling is a little unusual compared to most go code. You'll probably want to frequently check for errors using db.GetErrors()