faker-douyin-3. 配置解析,数据库连接初始化

107 阅读2分钟

1. 配置文件解析

使用配置文件解析神器viper链接,文件类型为可读性较高的yaml,先下载vper

go get github.com/spf13/viper

/config目录下新建config.yaml文件,暂时添加以下内容

server:
  AppMode: "debug"
  HttpPort: ":8080"

mysql:
  Host: "192.168.18.3"
  Port: "3306"
  User: "root"
  Password: "123456"
  Name: "douyin"

redis:
  Host: "192.168.18.3"
  Port: "6379"
  Password: "123456"

rabbitmq:
  Host: "192.168.18.3"
  Port: "5672"
  User: "guest"
  Password: "guest"

jwt:
  secret: "douyin"

ssh:
  Host: "192.168.18.3"
  User: "ftpuser"
  Password: "123456"

ftp:
  Host: "192.168.18.3"
  Port: "21"
  User: "ftpuser"
  Password: "123456"

/global目录下新建config.go文件存放和加载配置类,先创建配置类和全局配置变量Config

type Server struct {
   AppMode  string
   HttpPort string
}

type Mysql struct {
   Host     string
   Port     string
   User     string
   Password string
   Name     string
}

type Redis struct {
   Host     string
   Port     string
   Password string
}

type RabbitMq struct {
   Host     string
   Port     string
   User     string
   Password string
}

type Jwt struct {
   secret string
}

type Ssh struct {
   Host     string
   User     string
   Password string
}

type Ftp struct {
   Host     string
   Port     string
   User     string
   Password string
}

type ConfigEnv struct {
   Server   Server
   Mysql    Mysql
   Redis    Redis
   RabbitMq RabbitMq
   Jwt      Jwt
   Ssh      Ssh
   Ftp      Ftp
}

var Config ConfigEnv

用viper解析配置文件

func LoadConfig() {
   viper.SetConfigName("config")
   viper.SetConfigType("yaml")
   // viper.AddConfigPath("./config") 用相对路径在项目其他地方调用时路径会出错
   viper.AddConfigPath("/Users/cengdong/GolandProjects/faker-douyin/config")
   err := viper.ReadInConfig()
   if err != nil {
      panic(fmt.Errorf("fatal error config file: %w", err))
   }
   LoadServerConfig()
   LoadMysqlConfig()
   LoadRedisConfig()
   LoadRabbitMqConfig()
   LoadJwtConfig()
   LoadSshConfig()
   LoadFtpConfig()
   fmt.Println("配置加载完毕")
   fmt.Println(Config)
}

func LoadServerConfig() {
   Config.Server.AppMode = viper.GetString("server.AppMode")
   Config.Server.HttpPort = viper.GetString("server.HttpPort")
}

func LoadMysqlConfig() {
   Config.Mysql.Host = viper.GetString("mysql.Host")
   Config.Mysql.Port = viper.GetString("mysql.Port")
   Config.Mysql.User = viper.GetString("mysql.User")
   Config.Mysql.Password = viper.GetString("mysql.Password")
   Config.Mysql.Name = viper.GetString("mysql.Name")
}

func LoadRedisConfig() {
   Config.Redis.Host = viper.GetString("redis.Host")
   Config.Redis.Port = viper.GetString("redis.Port")
   Config.Redis.Password = viper.GetString("redis.Password")
}

func LoadRabbitMqConfig() {
   Config.RabbitMq.Host = viper.GetString("rabbitmq.Host")
   Config.RabbitMq.Port = viper.GetString("rabbitmq.Port")
   Config.RabbitMq.User = viper.GetString("rabbitmq.User")
   Config.RabbitMq.Password = viper.GetString("rabbitmq.Password")
}

func LoadJwtConfig() {
   Config.Jwt.secret = viper.GetString("jwt.secret")
}

func LoadSshConfig() {
   Config.Ssh.Host = viper.GetString("ssh.Host")
   Config.Ssh.User = viper.GetString("ssh.User")
   Config.Ssh.Password = viper.GetString("ssh.Password")
}

func LoadFtpConfig() {
   Config.Ftp.Host = viper.GetString("ftp.Host")
   Config.Ftp.Port = viper.GetString("ftp.Port")
   Config.Ftp.User = viper.GetString("ftp.User")
   Config.Ftp.Password = viper.GetString("ftp.Password")
}

main.go中调用LoadConfig函数

WechatIMG50.jpeg

2. Gorm连接Mysql数据库

安装

go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql

连接,在/model目录下新建dao目录,新建initDao.go文件

package dao

import (
   "faker-douyin/global"
   "fmt"
   "gorm.io/driver/mysql"
   "gorm.io/gorm"
   "gorm.io/gorm/logger"
   "log"
   "os"
   "time"
)

var (
   Db *gorm.DB
)

func Init() {
   mysqlLogger := logger.New(
      log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer
      logger.Config{
         SlowThreshold: time.Second, // 慢 SQL 阈值
         LogLevel:      logger.Info, // Log level
         Colorful:      true,        // 彩色打印
      },
   )
   dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local",
      global.Config.Mysql.User, global.Config.Mysql.Password, global.Config.Mysql.Host, global.Config.Mysql.Port,
      global.Config.Mysql.Name)
   var err error
   Db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{Logger: mysqlLogger})
   if err != nil {
      log.Panicln("err:", err.Error())
   }
   fmt.Println("数据库链接成功")
}
DB, err := Db.DB()
if err != nil {
   panic(fmt.Sprintf("数据库初始化配置失败,%s", err))
}
// SetMaxIdleConns 设置空闲连接池中连接的最大数量
DB.SetMaxIdleConns(10)

// SetMaxOpenConns 设置打开数据库连接的最大数量。
DB.SetMaxOpenConns(100)

// SetConnMaxLifetime 设置了连接可复用的最大时间。
DB.SetConnMaxLifetime(10 * time.Second)