前言
記錄自己在學習使用 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 協議》,轉載必須註明作者和本文連結