Golang使用mysql结合gorm框架作为持久化存储中间件

背景

项目中其他模块需要MySQL数据库的访问接口,需要一个可靠且高效的数据库连接机制来支持这些功能。为了简化数据库连接管理和提高应用性能,采用了GORM(Go语言的对象关系映射库)来实现数据库交互。

需求

需求分析

  1. 单一实例:确保在整个应用程序生命周期内仅初始化一次数据库连接,并提供一个全局访问点来获取这个连接。这有助于节省资源并避免重复建立连接带来的性能损耗。

  2. 延迟初始化(Lazy Initialization):数据库连接应在首次使用时进行初始化,而不是在程序启动时立即初始化,以提高应用启动速度和减少不必要的资源占用。

  3. 配置管理:支持通过外部配置文件动态设置数据库连接参数,如用户名、密码、主机地址、端口号、数据库名称等信息,以便于根据不同环境(开发、测试、生产)灵活调整。

  4. 连接池配置

    • 设置最大空闲连接数(MaxIdleConns),优化数据库连接的使用效率。
    • 设置最大打开连接数(MaxOpenConns),限制同时可以使用的数据库连接数量,防止过度占用数据库资源。
    • 设置连接的最大存活时间(ConnMaxLifetime),保证数据库连接的新鲜度和稳定性。
  5. 错误处理:当数据库连接失败或初始化过程中出现错误时,应抛出异常(panic),以中断程序执行,防止后续逻辑基于错误状态继续运行。

  6. 资源释放:提供一种机制来关闭数据库连接,确保在应用程序结束时正确释放所占用的资源。

  7. 并发安全:考虑到多线程环境下对数据库连接的并发访问需求,解决方案必须保证线程安全性,避免竞态条件等问题。

实现细节对应需求

  • 单一实例

    • 使用了全局变量db存储唯一的数据库连接实例。
    • sync.Once类型的dbOnce确保openDB函数只会被执行一次。
  • 延迟初始化

    • GetDB函数利用dbOnce.Do(openDB)实现了延迟加载,只有当第一次调用该函数时才会触发数据库连接的初始化。
  • 配置管理

    • config.GetGlobalConfig().DbConfig用于从外部配置文件中读取数据库相关的配置信息。
  • 连接池配置

    • 在成功建立数据库连接后,通过sqlDB.SetMaxIdleConnssqlDB.SetMaxOpenConnssqlDB.SetConnMaxLifetime方法设置了连接池的相关参数。
  • 错误处理

    • gorm.Open返回错误或者尝试获取原生数据库连接失败时,会引发panic,阻止程序继续运行。
  • 资源释放

    • 提供了CloseDB函数,允许手动关闭数据库连接。
  • 并发安全

    • sync.Once确保了在多线程环境中数据库连接的初始化是线程安全的,避免了多个goroutine同时尝试初始化数据库连接的问题。

设计模式——单例模式

单例模式(Singleton Pa

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值