警惕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

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

相关推荐
君顾15 小时前
智慧零售实战指南:从技术架构到落地方案全解析
java·开发语言·零售
南棱笑笑生5 小时前
20260904实测给飞凌OK3576-C开发板刷入Rockchip原厂的IMG固件【使用飞凌的DTS】切换串口波特率为1.5Mbps
c语言·开发语言·rockchip
平头哥技术团队6 小时前
Day 10 | 工欲善其事:VS Code 配置与项目归档
android·开发语言·前端·javascript·html·交互
乌萨奇也要立志学C++6 小时前
【洛谷】kmp算法
开发语言·算法
传奇开心果编程6 小时前
【Rust入门知识点学与练】第4课:条件判断 if / else
开发语言·学习·rust
m0_380743877 小时前
给 Claude API 调用补上超时重试和错误分类
开发语言·人工智能·php
Draw Stars7 小时前
Git BASH安装教程
开发语言·git·bash
步行cgn7 小时前
YAML 的语法规则
spring boot·后端
vortex57 小时前
一文讲透 Zsh 与 Bash 的区别
开发语言·bash
千谦阙听7 小时前
C++类和对象(中):默认成员函数、构造与析构、拷贝构造、运算符重载
开发语言·c++·学习