警惕GO的重复初始化

go的初始化方式有很多种,在某些情况下容易引起重复初始化导致错误。

事例如下:

当使用gorm连接数据库时定义了全局DB

Go 复制代码
var DB *gorm.DB

但是在后面某个函数内部初始化时导致DB重新初始化变成了局部变量,导致原来的全局变量DB还是nil

Go 复制代码
func Init() {
	dsn := fmt.Sprintf("root:@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True&loc=Local")
	DB, _ = gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if DB.Error != nil {
		fmt.Println("连接失败")
	} else {
		fmt.Println("连接成功")
	}
}

以至于在后面的调用中报错如下:

Go 复制代码
func (User *UserController) Find(c *gin.Context) {
	userlist := []models.User{}
	result := models.DB.Find(&userlist)
	if result.Error != nil {
		c.JSON(http.StatusOK, gin.H{
			"code": 1,
			"msg":  "查询失败",
			"data": nil,
		})
	} else {
		c.JSON(http.StatusOK, gin.H{
			"code": 0,
			"msg":  "查询成功",
			"data": userlist,
		})
	}

}
Go 复制代码
runtime error: invalid memory address or nil pointer dereference

所以要警惕两种初始化方法重复使用。

相关推荐
IT_陈寒6 小时前
Redis雪崩把我坑惨了,三招教你躲过去
前端·人工智能·后端
ikoala6 小时前
同样叫 Harness,DeepSeek Harness 和 Pi 根本不在同一层
前端·后端·ai编程
大白806 小时前
多模态大模型能干什么?图文音视频统一理解,正在重画 AI 的边界
后端
花卷持续成长6 小时前
“码上面试”项目学习02
后端
mldong6 小时前
同一个审批流引擎,我写了两次:一次 11226 行,一次 7036 行
后端·架构
百万蹄蹄向前冲6 小时前
一张平面图把学校做成2D游戏
前端·人工智能·后端
沙蒿同学6 小时前
一个人做完一套企业级系统,赚到了第一个 1000 块
vue.js·后端·go
机器之心6 小时前
突发:Claude自主发现未知生物系统,或能编辑基因
前端·人工智能·后端
用户8356290780516 小时前
使用 Python 在 Excel 中添加和管理图片
后端·python
码事漫谈6 小时前
AI巨头集体喊“慢”,但谁都不敢先踩刹车
后端