配置文件读取——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 协议》,转载必须注明作者和本文链接
yaml与json有重复代码,查了相关api,做了个集成 配置文件读取