AutoMigrate() 报错 Panic Error: Memory Address or Nil Pointer Dereference
1. 运行环境
Windows 11, WSL2
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.4 LTS
Release: 20.04
Codename: focal
2. 问题描述?
我再通过运行Go的时候获取了一下的报错,panic: runtime error: invalid memory address or nil pointer dereference
。
我觉得这是因为&user.User{}
所导致的,
- 尝试在在SO寻找类似的报错,结果而言并不是shadowing的问题
- 尝试了把
struct
在当地文件运行,也有类似的错误 - 检查了前几集课程的代码,复制后粘贴,以排除是人疏忽
按照教学,此行database.DB.AutoMigrate(&user.User{})
应该是需要放在最后一行的
func SetupDB() {
...
database.Connect(dbConfig, logger.Default.LogMode(logger.Info))
database.SQLDB.SetMaxOpenConns(config.GetInt("database.mysql.max_open_connections"))
database.SQLDB.SetMaxIdleConns(config.GetInt("database.mysql.max_idle_connections"))
database.SQLDB.SetConnMaxLifetime(time.Duration(config.GetInt("database.mysql.max_life_seconds")) * time.Second)
database.DB.AutoMigrate(&user.User{})
}
3. 您期望得到的结果?
我期望的结果是能顺利migrate user table到MySQL的数据库中
4. 您实际得到的结果?
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x28 pc=0x7fb2b8]
goroutine 1 [running]:
...
subscription-manager/bootstrap.SetupDB()
/root/workspace/go/src/github.com/weehong/subscription-manager/bootstrap/database.go:39 +0x44a
main.main()
/root/workspace/go/src/github.com/weehong/subscription-manager/main.go:24 +0xf4
經過不斷的嘗試,我終於找到問題的所在了
原因是因為我在database用了錯誤的syntax
學到新的東西了
原來用
var DB *gorm.DB
之後,還能用:=
來取代原來的數據而我的問題就是在這裡,這麼做的話,我的DB就會重新初始化,而
var DB
還是null的。stackoverflow.com/a/42780598/46523...
這就會讓
DB
變成shadowing了,從而導致nil pointer
的問題報錯