viper连接MySQL示例

下面是一个Go项目的示例,使用Viper读取YAML配置文件中的MySQL配置信息,并连接到MySQL数据库。

1. 安装依赖

首先,确保你安装了必要的Go依赖:

go get github.com/spf13/viper
go get github.com/go-sql-driver/mysql

2. 创建配置文件

创建一个名为config.yaml的配置文件,内容如下:

mysql:
  host: "localhost"
  port: 3306
  user: "root"
  password: "password"
  dbname: "exampledb"

3. 编写代码

  1. 创建一个名为main.go的文件,内容如下:
/*
Package app
@Author 帅气的chen 2024/7/23
*/
package main

import (
	"github.com/czh/web-auth/store/mysql"
	"github.com/spf13/viper"
	"log"
)

func main() {
	// 初始化Viper
	viper.SetConfigName("config")
	viper.SetConfigType("yaml")
	viper.AddConfigPath("./config")   //todo 确保路径正确
	if err := viper.ReadInConfig(); err != nil {
		log.Fatalf("Error reading config file: %s", err)
	}
	mysql.InitMySQL()
	//redis.InitRedis()
}
  1. 创建 init.go文件,编写初始化代码
/*
Package mysql
@Author 帅气的chen 2024/7/15
*/
package mysql

import (
	"fmt"
	"github.com/spf13/viper"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"log"
)

var Db *gorm.DB

type Config struct {
	MySQL MySQLConfig
}

type MySQLConfig struct {
	Host     string
	Port     int
	User     string
	Password string
	DBName   string
}

func InitMySQL() {
	// 解析配置文件
	var config Config
	if err := viper.Unmarshal(&config); err != nil {
		log.Fatalf("Unable to decode into struct: %v", err)
	}

	// 构建MySQL数据源名称(DSN)
	dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local",
		config.MySQL.User,
		config.MySQL.Password,
		config.MySQL.Host,
		config.MySQL.Port,
		config.MySQL.DBName,
	)

	// 连接到数据库
	db, err := gorm.Open(mysql.New(mysql.Config{DSN: dsn}), &gorm.Config{})
	if err != nil {
		log.Fatalf("连接MySQL失败: %v", err)
	}
	Db = db
}
  1. 目录结构:

在这里插入图片描述

4. 运行项目

没有报错即运行成功

说明

  • viper.SetConfigName("config"):设置配置文件的名称(不包括扩展名)。
  • viper.SetConfigType("yaml"):设置配置文件的类型。
  • viper.AddConfigPath("."):设置配置文件的路径,这里是当前目录。
  • viper.ReadInConfig():读取配置文件。
  • viper.Unmarshal(&config):将配置文件解析到结构体中。
  • sql.Open("mysql", dsn):使用数据源名称(DSN)连接到MySQL数据库。

这个示例展示了如何使用Viper读取YAML配置文件,并使用Go的database/sql包连接到MySQL数据库。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值