升级GORM至v1.25.12后dbresolver插件v1.5.2运行失败
GORM v1.25.12与dbresolver v1.5.2兼容性构建失败问题
问题现象
升级GORM至v1.25.12后,使用dbresolver v1.5.2插件启动服务时出现构建失败,降级GORM到v1.25.11后服务可正常运行。
代码片段
gormDb, err = gorm.Open(mysql.Open(fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local", viper.GetString("mysql.username"), viper.GetString("mysql.password"), viper.GetString("mysql.host.write"), viper.GetInt("mysql.port"), viper.GetString("mysql.database"))), &gorm.Config{ SkipDefaultTransaction: true, PrepareStmt: true, }) if err != nil { return err } gormSourceDb, err := gormDb.DB() if err != nil { return err } gormSourceDb.SetMaxIdleConns(viper.GetInt("mysql.max_idle_conns")) gormSourceDb.SetMaxOpenConns(viper.GetInt("mysql.max_open_conns")) return gormDb.Use(dbresolver.Register(dbresolver.Config{ Replicas: []gorm.Dialector{mysql.Open(fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local", viper.GetString("mysql.username"), viper.GetString("mysql.password"), viper.GetString("mysql.host.read"), viper.GetInt("mysql.port"), viper.GetString("mysql.database")))}, }))
构建错误信息
Build Error: go build -o d:\project\ecosservice\cmd\__debug_bin2894905842.exe -gcflags all=-N -l .\run_server.go # gorm.io/plugin/dbresolver C:\Users\83667\go\pkg\mod\gorm.io\plugin\dbresolver@v1.5.2\dbresolver.go:147:5: unknown field PreparedSQL in struct literal of type gorm.PreparedStmtDB (exit status 1)
临时解决办法
将GORM版本回退到v1.25.11,执行命令:
go get gorm.io/gorm@v1.25.11
问题说明
dbresolver v1.5.2的代码中引用了GORM内部结构体gorm.PreparedStmtDB的PreparedSQL字段,但该字段在GORM v1.25.12中被移除或修改,导致兼容性冲突。
建议等待GORM官方发布修复版本,或关注dbresolver插件是否推出适配GORM v1.25.12的更新版本。
内容的提问来源于stack exchange,提问作者SuperGodK
相关产品推荐
相关产品推荐

