配置文件读取——MySQL 多个连接

前言

记录自己在学习使用 Go 过程中踩过的坑、解决方案等。

有收获的话请 点个赞,没有收获的话可以 反对 没有帮助 举报 三连。

需求

实现一个可以链接多个数据库的 MySQL 配置文件读取 demo

实现

目录结构

$GOPATH\src
├─demo 
│  ├─conf.json
│  ├─conf.yaml
│  ├─main.go

上代码

main.go

// 如果只空行,不写注释,格式就乱了,不知道为啥,下面都是这样的
package main
//
//
import (
    "encoding/json"
    "fmt"
    yaml "gopkg.in/yaml.v3"
    "io/ioutil"
    "os"
)
//
func main()  {
    Json()
    Yaml()
}
//
//
type conn struct {
    Host      string
    Dbname    string
    Username  string
    Password  string
}
//
//
type Config struct {
    Mysql map[string] conn
}
//
//
func Json()  {
    //传入配置路径
    file, err := os.Open("./conf.json")
    if err != nil {
        fmt.Println("配置文件conf.json错误", err)
        //错误处理
        return
    }
    defer file.Close()

    decoder := json.NewDecoder(file)
    conf := new(Config)
    err = decoder.Decode(&conf)
    if err != nil {
        fmt.Println("解码错误: ", err)
        //错误处理
        return
    }
    fmt.Println("json")
    fmt.Println(conf.Mysql)
    //根据字段需要选择配置节
    db, ok := conf.Mysql["default"]
    fmt.Println(db)
    fmt.Println(ok)
    if ok {
        fmt.Println(db.Host)
        fmt.Println(db.Dbname)
        fmt.Println(db.Username)
        fmt.Println(db.Password)
    } else {
        fmt.Println("error")
        //错误处理
        return
    }

    fmt.Println(conf.Mysql["slave_db01"])
    fmt.Println(conf.Mysql["user_center"])
    fmt.Println(conf.Mysql["data_center"])
}
//
//
func Yaml()  {
    //传入配置路径
    yamlFile, err := ioutil.ReadFile("./conf.yaml")
    if err != nil {
        fmt.Println("配置文件conf.yaml错误", err)
        //错误处理
        return
    }

    conf := new(Config)
    err = yaml.Unmarshal(yamlFile, conf)
    if err != nil {
        fmt.Println("解码错误: ", err)
        //错误处理
        return
    }

    fmt.Println("yaml")
    fmt.Println(conf.Mysql)

    //根据字段需要选择配置节
    db, ok := conf.Mysql["default"]
    if ok {
        fmt.Println(db.Host)
        fmt.Println(db.Dbname)
        fmt.Println(db.Username)
        fmt.Println(db.Password)
    } else {
        fmt.Println("error")
        //错误处理
        return
    }
    fmt.Println(conf.Mysql["slave_db01"])
    fmt.Println(conf.Mysql["user_center"])
    fmt.Println(conf.Mysql["data_center"])
}

conf.yaml

mysql:
    default: {
        host: 127.0.0.1:3306,
        dbname: test,
        username: root,
        password: default
    }
    slave_db01: {
        host: 127.0.0.1:3306,
        dbname: test,
        username: root,
        password: slave_db01
    }
    user_center: {
        host: 127.0.0.1:3306,
        dbname: test,
        username: root,
        password: user_center
    }
    data_center: {
        host: 127.0.0.1:3306,
        dbname: test,
        username: root,
        password: data_center
    }

conf.json

{
    "mysql": {
        "default": {
            "host": "127.0.0.1:3306",
            "dbname": "test",
            "username": "root",
            "password": "default"
        },
        "slave_db01": {
            "host": "127.0.0.1:3306",
            "dbname": "test",
            "username": "root",
            "password": "slave_db01"
        },
        "user_center": {
            "host": "127.0.0.1:3306",
            "dbname": "test",
            "username": "root",
            "password": "user_center"
        },
        "data_center": {
            "host": "127.0.0.1:3306",
            "dbname": "test",
            "username": "root",
            "password": "data_center"
        }
    }
}

执行结果如下

$ go run main.go
json
map[data_center:{127.0.0.1:3306 test root data_center} default:{127.0.0.1:3306 test root default} slave_db01:{127.0.0.1:3306 test root slave_db01} user_center:{127.0.0.1:3306 test root user_center}]
{127.0.0.1:3306 test root default}
true
127.0.0.1:3306
test
root
default
{127.0.0.1:3306 test root slave_db01}
{127.0.0.1:3306 test root user_center}
{127.0.0.1:3306 test root data_center}
yaml
map[data_center:{127.0.0.1:3306 test root data_center} default:{127.0.0.1:3306 test root default} slave_db01:{127.0.0.1:3306 test root slave_db01} user_center:{127.0.0.1:3306 test root user_center}]
127.0.0.1:3306
test
root
default
{127.0.0.1:3306 test root slave_db01}
{127.0.0.1:3306 test root user_center}
{127.0.0.1:3306 test root data_center}

如果有什么错误的地方或者是更好的方案,希望大家能指出,一起学习进步。

本作品采用《CC 协议》,转载必须注明作者和本文链接
感谢阅读,有收获的话不妨点个赞:smiling_imp:
讨论数量: 1
pardon110

yaml与json有重复代码,查了相关api,做了个集成 配置文件读取

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!