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

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

相关推荐
一晌小贪欢几秒前
PyQt5 开发一个 PDF 批量合并工具
开发语言·qt·pdf
老马9527几秒前
opencode3-我的能力超乎你的想象
人工智能·后端
神仙别闹1 分钟前
基于 MATLAB 实现的图像信号处理
开发语言·matlab·信号处理
迷藏4941 分钟前
**超融合架构下的Go语言实践:从零搭建高性能容器化微服务集群**在现代云原生时代,*
java·python·云原生·架构·golang
立莹Sir4 分钟前
AI+云原生:当智能遇见敏捷,技术融合的未来之路
人工智能·云原生
swift192216 分钟前
Qt多语言问题 —— 静态成员变量
开发语言·c++·qt
weixin_4080996710 分钟前
【企业级方案】财务自动化:OCR发票识别 + 自动录入系统完整实现(附代码与落地架构)
后端·ocr·api·发票 ocr 识别·发票自动录入系统·发票识别 api·财务自动化
それども10 分钟前
Spring Bean @Autowired自注入空指针问题
java·开发语言·spring
刘~浪地球14 分钟前
云原生与容器--Docker 容器化最佳实践
docker·云原生·容器
老卢聊运维15 分钟前
CoreDNS配置详解:forward、cache、rewrite插件最佳实践指南
运维·云原生·kubernetes