go-连接Mysql

1.首先准备文件

config-app.yml 用来存放mysql配置

config-config.go 读取配置文件、初始化配置结构体 

test-testGorm.go 建立数据库连接等基本功能

2.app.yml

mysqldb:
  username: root
  password: wh123456
  host: localhost
  port: 3306
  name: ginchat
  charset: utf8mb4
  parseTime: True
  loc: Local

这是应用程序配置文件 app.yml。它以 YAML 格式存储了数据库连接信息和其他配置项。

  • mysqldb 是一个键,对应一个包含数据库连接信息的子映射。
  • username, password, host, port, name, charset, parseTime, loc 是数据库连接的具体参数。

3.config.go

// config/config.go

package config

import (
	"fmt"
	"strconv"

	"github.com/spf13/viper"
)

// DatabaseConfig 结构体定义了数据库连接的配置项
type DatabaseConfig struct {
	Username  string `mapstructure:"username"`  // 用户名
	Password  string `mapstructure:"password"`  // 密码
	Host      string `mapstructure:"host"`      // 主机地址
	Port      string `mapstructure:"port"`      // 端口号
	Name      string `mapstructure:"name"`      // 数据库名称
	Charset   string `mapstructure:"charset"`   // 字符集
	ParseTime bool   `mapstructure:"parseTime"` // 解析时间
	Loc       string `mapstructure:"loc"`       // 时区
}

// AppConfig 结构体定义了整体应用程序的配置
type AppConfig struct {
	Database DatabaseConfig
	// 可以添加其他配置项
}

// AppConfigInstance 是 AppConfig 的实例,用于存储配置信息
var AppConfigInstance *AppConfig

// GetDBConfig 用于生成数据库连接字符串
func (dbConfig *DatabaseConfig) GetDBConfig() string {
	// 将布尔值转换为字符串 // ParseTime 是个bool类型 在进行过程中值会变成false
	parseTimeStr := strconv.FormatBool(AppConfigInstance.Database.ParseTime)

	// 格式化数据库连接字符串
	dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=%s&parseTime=%s&loc=%s",
		dbConfig.Username, dbConfig.Password, dbConfig.Host, dbConfig.Port,
		dbConfig.Name, dbConfig.Charset, parseTimeStr, dbConfig.Loc)

	fmt.Printf("ParseTime value from config: %v\n", dsn)
	return dsn
}

// LoadConfig 用于加载配置文件并初始化 AppConfigInstance
func LoadConfig() {
	fmt.Println("开始读取配置")
	viper.SetConfigName("app")    // 文件名(无扩展名)
	viper.SetConfigType("yml")    // 文件类型
	viper.AddConfigPath("config") // 文件路径

	// 初始化 AppConfigInstance
	AppConfigInstance = &AppConfig{}

	// 读取配置文件
	err := viper.ReadInConfig()
	if err != nil {
		panic(fmt.Errorf("配置文件读取错误: %s \n", err))
	}

	// 打印读取到的配置
	// fmt.Printf("Read config from file: %+v\n", viper.AllSettings())

	// 解析配置文件中的 mysqldb 部分到 AppConfigInstance.Database
	err = viper.UnmarshalKey("mysqldb", &AppConfigInstance.Database)
	if err != nil {
		panic(fmt.Errorf("配置文件解析错误: %s \n", err))
	}

	// 打印结构体内容
	fmt.Printf("AppConfigInstance.Database: %+v\n", AppConfigInstance.Database)
	fmt.Printf("AppConfigInstance: %+v\n", AppConfigInstance)
}

这是配置相关的 Go 代码文件 config.go以下是每个部分的解释:

  • DatabaseConfig 结构体定义了数据库连接的各个参数,并使用 mapstructure 标签指定了 YAML 配置文件中的字段名。
  • AppConfig 结构体包含一个 Database 字段,用于存储数据库配置。
  • GetDBConfig 函数生成数据库连接字符串。
  • LoadConfig 函数用于加载配置文件,初始化 AppConfigInstance 并将配置映射到结构体。

4.testGorm.go

package main

import (
	"fmt"

	"ginchat.com/config"
	"ginchat.com/models"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

func main() {
	// 初始化 AppConfigInstance 并加载配置
	config.AppConfigInstance = &config.AppConfig{}

	// 加载配置
	config.LoadConfig()

	// fmt.Printf("AppConfigInstance: %+v\n", config.AppConfigInstance)

	// 数据库连接
	db, err := gorm.Open(mysql.Open(config.AppConfigInstance.Database.GetDBConfig()), &gorm.Config{})
	if err != nil {
		println("db:", db)
		panic("数据库连接失败")
	}
	fmt.Println("数据库连接成功!")

// 在这里可以继续编写你的应用程序逻辑
}

这是连接数据库测试文件 main.go,其中包含了应用程序的入口点。以下是解释:

  • main 函数中初始化了 AppConfigInstance 并调用了 LoadConfig 函数加载配置。
  • 使用 gorm.Open 打开数据库连接,并在成功时输出连接成功的消息。

这三个文件一起工作,实现了读取配置文件、初始化配置结构体、建立数据库连接等基本功能。

  • 10
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值