下面是一个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. 编写代码
- 创建一个名为
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()
}
- 创建
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
}
- 目录结构:
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数据库。