GoZero实现数据库MySQL单例模式连接的简单示例

 更新时间:2025年02月17日 08:24:51   作者:360_go_php  
在 GoZero 框架中实现数据库的单例连接可以通过以下步骤来完成,GoZero 使用 gorm 作为默认的数据库操作框架,接下来我会展示一个简单的单例模式实现,需要的朋友可以参考下

1. 定义数据库连接的单例结构

首先,你需要定义一个数据库连接的结构体,并在初始化时保证只有一个连接。

package database

import (
	"fmt"
	"log"
	"sync"

	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

var (
	db   *gorm.DB
	once sync.Once
)

// InitDB 初始化数据库连接
func InitDB(dsn string) {
	once.Do(func() {
		var err error
		db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
		if err != nil {
			log.Fatalf("failed to connect database: %v", err)
		}
		fmt.Println("Database connected successfully")
	})
}

// GetDB 获取数据库连接
func GetDB() *gorm.DB {
	if db == nil {
		log.Fatal("Database is not initialized")
	}
	return db
}

2. 说明

  • once.Do:保证 InitDB 函数只会执行一次,即使多次调用也只会初始化数据库连接一次。
  • dsn:你需要传入数据库连接的 DSN(Data Source Name),通常是类似 username:password@tcp(host:port)/dbname?charset=utf8mb4&parseTime=True&loc=Local 这样的格式。
  • GetDB():返回数据库的连接,如果数据库未初始化,会触发错误。

3. 如何使用

在你的业务代码中,只需要调用 InitDB 初始化数据库连接,然后使用 GetDB 获取到数据库连接进行操作。

package main

import (
	"log"
	"myapp/database"
)

func main() {
	// 初始化数据库连接
	database.InitDB("root:password@tcp(localhost:3306)/mydb?charset=utf8mb4&parseTime=True&loc=Local")
	
	// 获取数据库连接
	db := database.GetDB()

	// 执行数据库操作,比如查询数据
	var user User
	if err := db.First(&user).Error; err != nil {
		log.Fatalf("Error querying user: %v", err)
	}

	// 输出查询结果
	log.Printf("User: %+v", user)
}

4. 完整示例

假设你的 User 结构体是如下定义的:

package main

type User struct {
	ID   uint   `gorm:"primaryKey"`
	Name string `gorm:"size:255"`
}

通过这样的方式,你可以保证在应用程序的整个生命周期内,数据库连接仅会被创建一次,从而实现了数据库连接的单例模式。

总结

这种方式使用 sync.Once 来保证数据库连接在应用中只有一个实例,并提供 InitDBGetDB 函数来初始化和获取数据库连接。这种方式非常适合于 GoZero 框架的项目,可以有效减少不必要的数据库连接创建。

到此这篇关于GoZero实现数据库MySQL单例模式连接的简单示例的文章就介绍到这了,更多相关GoZero MySQL单例模式连接内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Golang中unicode码和中文的互相转换函数使用

    Golang中unicode码和中文的互相转换函数使用

    这篇文章主要为大家介绍了Golang中unicode码和中文的互相转换函数使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • Go调用链可视化工具使用实例探究

    Go调用链可视化工具使用实例探究

    本文介绍一款工具 go-callvis,它能够将 Go 代码的调用关系可视化出来,并提供了可交互式的 web 服务,在接手他人代码或调研一些开源项目时,如果能够理清其中的代码调用链路,这将加速我们对实现的理解
    2024-01-01
  • 解决golang结构体tag编译错误的问题

    解决golang结构体tag编译错误的问题

    这篇文章主要介绍了解决golang结构体tag编译错误的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-05-05
  • Go并发同步Mutex典型易错使用场景

    Go并发同步Mutex典型易错使用场景

    这篇文章主要为大家介绍了Go并发同步Mutex典型易错使用场景示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • golang post请求常用的几种方式小结

    golang post请求常用的几种方式小结

    这篇文章主要介绍了golang post请求常用的几种方式小结,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • Kotlin编程基础语法编码规范

    Kotlin编程基础语法编码规范

    这篇文章主要为大家介绍了Kotlin编程条件控制示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • 深入了解Go语言中sync.Pool的使用

    深入了解Go语言中sync.Pool的使用

    本文将介绍 Go 语言中的 sync.Pool并发原语,包括sync.Pool的基本使用方法、使用注意事项等的内容,对我们了解Go语言有一定的帮助,需要的可以参考一下
    2023-04-04
  • Go中阻塞以及非阻塞操作实现(Goroutine和main Goroutine)

    Go中阻塞以及非阻塞操作实现(Goroutine和main Goroutine)

    本文主要介绍了Go中阻塞以及非阻塞操作实现(Goroutine和main Goroutine),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-05-05
  • Go语言中hot path的作用

    Go语言中hot path的作用

    热路径指的是经常执行的性能敏感的代码路径,优化这些路径可以显著提高应用性能,通过工具如pprof进行性能分析,识别和优化热路径,能有效提升系统的响应能力和可靠性
    2024-10-10
  • Fedora14 Linux系统安装Golang开发环境笔记

    Fedora14 Linux系统安装Golang开发环境笔记

    这篇文章主要介绍了Fedora14 Linux系统安装Golang开发环境笔记,本文讲解了2种安装方法,需要的朋友可以参考下
    2014-10-10

最新评论