我今天开始玩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 int
为ID 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] 删除。
我来说两句