gorm内存问题
gorm内存问题报错
问题背景#
在db.go文件中声明了全局变量,并在InitDB函数中初始化db
var db *gorm.DB func InitDB() { // mysql DbHost := "" DbPort := DbUser := "" DbPassword := "" DbName := "" DbCharset := "" dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=%s&parseTime=True&loc=Local", DbUser, DbPassword, DbHost, DbPort, DbName, DbCharset) db, err = gorm.Open(mysql.New(mysql.Config{DSN: dsn}), &gorm.Config{}) if err!=nil{ panic("failed to connect to database, err:"+err.Error()) }
该过程没有报错,但是在后续数据库查询时出现内存错误,runtime error: invalid memory address or nil pointer dereference
初步判断是db指针出错
错误原因#
虽然声明了全局变量db,但是在InitDB函数中,由于使用推导等号:=
,InitDB函数中实际上生成了一个局部变量db
因此全局变量db并没有被赋值
解决方法#
解决方法很多,其中一个方法是声明一个全局变量err,然后在InitDB函数中使用=
创建db,这样就不会产生局部变量db,而是直接使用全局变量db
作者:yuxiayizhengwan
出处:https://www.cnblogs.com/yuxiayizhengwan/p/15071773.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库