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

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

相关推荐
bobz96529 分钟前
windows 配置 conda 环境变量
后端
java1234_小锋34 分钟前
一周学会Matplotlib3 Python 数据可视化-坐标轴 (Axis)
开发语言·python·信息可视化·matplotlib·matplotlib3
回家路上绕了弯1 小时前
线程池优化实战:从性能瓶颈到极致性能的演进之路
java·后端
bobz9651 小时前
pycharm pro 安装插件失败
后端
小苏兮1 小时前
飞算JavaAI深度解析:专为Java生态而生的智能引擎
java·开发语言·人工智能·java开发·飞算javaai炫技赛
awei09161 小时前
如何将服务器中的Docker镜像批量导出?
服务器·docker·云原生·容器
Bdygsl2 小时前
前端开发:JavaScript(6)—— 对象
开发语言·javascript·ecmascript
丘山子2 小时前
如何规避 A/B Testing 中的致命错误?何时进行 A/B 测试?
前端·后端·面试
babytiger2 小时前
我的c#用到Newtonsoft.Json.dll,Fleck.dll这两个dll能否打到一个exe 中,而不是一起随着exe拷贝
开发语言·c#·json
David爱编程2 小时前
K8s配置动态更新实战:不用重启容器也能生效
云原生·容器·kubernetes