dbresolver icon indicating copy to clipboard operation
dbresolver copied to clipboard

使用 dbresolver 后,db.AutoMigrate 会访问到空指针

Open hackersean opened this issue 1 year ago • 0 comments

我后面使用TiDB,可直接连接多个地址,所以使用了 dbresolver。 在创建gorm时,发现使用了一个nil的gorm.Dialector。后面db.AutoMigrate 就会读到空指针。 请问这里 gorm.Open 是必须要传入一个正确的链接么?后面不是已经使用了dbresolver了吗? 辛苦解答一下,谢谢。

db, err := gorm.Open(nil, &gorm.Config{})
	if err != nil {
		return err
	}

err = db.Use(dbresolver.Register(dbresolver.Config{Sources: dias, Policy: dbresolver.RandomPolicy{}}))
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x40 pc=0x8a46aa]

goroutine 1 [running]:
gorm.io/gorm.(*DB).Migrator(0x40f227?)
        /home/sean/code/go/pkg/mod/gorm.io/[email protected]/migrator.go:23 +0xaa
gorm.io/gorm.(*DB).AutoMigrate(0xc000517d40?, {0xc00050fb50, 0x1, 0x1})
        /home/sean/code/go/pkg/mod/gorm.io/[email protected]/migrator.go:28 +0x28
gitee.com/pingcap_enterprise/tidb-enterprise-manager/pkg/storage.AutoMigrate(...)
        /home/sean/code/src/gitee.com/pingcap_enterprise/tidb-enterprise-manager/pkg/storage/init.go:58
gitee.com/pingcap_enterprise/tidb-enterprise-manager/pkg/storage.InitStorage(0xc00013e130)
        /home/sean/code/src/gitee.com/pingcap_enterprise/tidb-enterprise-manager/pkg/storage/init.go:50 +0x2dd
main.initialize()
        /home/sean/code/src/gitee.com/pingcap_enterprise/tidb-enterprise-manager/cmd/apiserver/main.go:55 +0x1d0
main.main()
        /home/sean/code/src/gitee.com/pingcap_enterprise/tidb-enterprise-manager/cmd/apiserver/main.go:64 +0x1d
exit status 2

hackersean avatar Apr 13 '23 02:04 hackersean