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

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

相关推荐
我的炸串拌饼店1 小时前
ASP.NET MVC 中SignalR实现实时进度通信的深度解析
后端·asp.net·mvc
Mr_wilson_liu1 小时前
k8s查看内存占用前十的20个pod服务,不包括job
云原生·容器·kubernetes
爱喝阔落的猫1 小时前
【JVM 07-运行时常量池重要组成部分-StringTable】
开发语言·jvm·python
狐凄1 小时前
Python实例题:图片批量处理工具
开发语言·python
挑战者6668882 小时前
springboot入门之路(一)
java·spring boot·后端
老土豆FUSK2 小时前
C++ 引用的使用
开发语言·c++
code bean2 小时前
【C#】C# 中的 `init`、`readonly` 和 `const` 有什么区别?
开发语言·c#
网小鱼的学习笔记2 小时前
html中的table标签以及相关标签
开发语言·前端·python·html
重整旗鼓~3 小时前
7.索引库操作
java·开发语言
wmze3 小时前
InnoDB存储引擎
后端