Golang

关注公众号 jb51net

关闭
首页 > 脚本专栏 > Golang > GoZero MySQL单例模式连接

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

作者: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. 说明

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单例模式连接内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文