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

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

相关推荐
SHtop1120 小时前
排序算法(golang实现)
算法·golang·排序算法
ftpeak20 小时前
《WebAssembly指南》第九章:WebAssembly 导入全局字符串常量
开发语言·rust·wasm
卡戎-caryon20 小时前
【Java SE】06. 数组
java·开发语言
Rain_is_bad20 小时前
初识c语言————数学库函数
c语言·开发语言·算法
lsx20240620 小时前
Eclipse 快捷键
开发语言
老华带你飞20 小时前
学生信息管理系统|基于Springboot的学生信息管理系统设计与实现(源码+数据库+文档)
java·数据库·spring boot·后端·论文·毕设·学生信息管理系统
Fency咖啡21 小时前
Spring 基础核心 - SpringMVC 入门与请求流程
java·后端·spring·mvc
数字化顾问21 小时前
从索引失效到毫秒级响应——SQL 优化实战案例:从慢查询到高性能的完整指南之电商大促篇
java·开发语言·数据库
eqwaak01 天前
实战项目与工程化:端到端机器学习流程全解析
开发语言·人工智能·python·机器学习·语言模型
阑梦清川1 天前
深入理解文件系统和软硬链接
后端