尝试从模型

时间:2016-02-27 20:13:24

标签: mysql go go-gorm

我今天开始玩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)
}

因此该模型旨在非常基础,例如一列有一列。现在出现了输出:

  

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

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

1 个答案:

答案 0 :(得分:0)

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

create table User() ENGINE=InnoDB

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

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

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

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

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

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

对于其他错误,与大多数go代码相比,gorm's error handling有点不寻常。您可能希望使用db.GetErrors()经常检查错误。