我今天开始玩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之外几乎没有任何因为某些原因而失败。 所以问题是,是否有人知道为什么会抛出错误以及是否有任何解决方案。
答案 0 :(得分:0)
尝试创建空表时发生错误,例如:
create table User() ENGINE=InnoDB
gorm生成一个空表语句,因为User结构的id字段是私有的。
将id int
更改为ID int
。 Capitalising结构字段的第一个字母将其公开给外部包。
作为次要问题,而不仅仅是打印错误:
db, err := gorm.Open(...
fmt.Println(err)
检查每个潜在错误并立即处理它们是个好主意:
db, err := gorm.Open(...
if err != nil {
log.Fatal(err)
}
对于其他错误,与大多数go代码相比,gorm's error handling有点不寻常。您可能希望使用db.GetErrors()经常检查错误。