0
点赞
收藏
分享

微信扫一扫

Golang 多种配置文件解析

罗蓁蓁 2022-01-21 阅读 62
golang

Golang 配置文件相关操作

1、JSON 文件

 package main
 ​
 /*
  解析 json 格式的配置文件
 文件内容如下:
 {
   "type": "json",
   "postgres": {
     "host": "localhost",
     "port": 5432,
     "username": "postgres",
     "password": "postgres",
     "dbname": "bubble"
   }
 }
 */
 import (
   "encoding/json"
   "fmt"
   "io/ioutil"
   "os"
 )
 ​
 // 定义第一级配置文件的结构体
 type Config struct {
   Type     string
   Postgres DbConf // 数据类型为第二级配置文件的结构体名称
 }
 ​
 // 定义第二级配置文件的结构体   注意数据类型
 type DbConf struct {
   Host     string `json:"host"`
   Port     uint   `json:"port"`
   Username string `json:"username"`
   Password string `json:"password"`
   DbName   string `json:"dbname"`
 }
 ​
 // 定义配置文件结构体
 type JsonStruct struct {
 }
 ​
 // 创建配置文件的构造函数
 func NewJsonStruct() *JsonStruct {
   return &JsonStruct{}
 }
 ​
 // 加载配置文件
 func (jt *JsonStruct) Load(filename string, v interface{}) {
   // 读取配置文件
   data, err := ioutil.ReadFile(filename)
   if err != nil {
     return
   }
   // 解析配置文件
   err = json.Unmarshal(data, v)
   if err != nil {
     return
   }
 ​
 }
 ​
 func main() {
   JsonParse := NewJsonStruct()
   v := Config{}
   // 获取配置文件路径
   osGwd, _ := os.Getwd()
   confPath := osGwd + "/conf_json.json"
   // 加载配置文件
   JsonParse.Load(confPath, &v)
   fmt.Printf("配置文件的类型为 %s \n", v.Type)
   fmt.Printf("PG 数据库的配置为 %s \n", v.Postgres)
 }
 ​

2、YAML 文件(推荐)

 package main
 /*
 解析 yaml 格式的配置文件
 文件内容如下:
 database:
   postgres:
     host: localhost
     port: 5432
     username: postgres
     password: postgres
     dbname: bubble
 } */
 ​
 import (
   "fmt"
   "gopkg.in/yaml.v2"
   "io/ioutil"
   "os"
 )
 ​
 type YamlStruct struct {
 }
 ​
 func NewYamlStruct() *YamlStruct {
   return &YamlStruct{}
 }
 ​
 type YamlConfig struct {
   DataBase DataBase `yaml:"database"`
 }
 ​
 type DataBase struct {
   PgConf PgConf `yaml:"postgres"`
 }
 ​
 type PgConf struct {
   Host     string `yaml:"host"`
   Port     string `yaml:"port"`
   Username string `yaml:"username"`
   Password string `yaml:"password"`
   DbName   string `yaml:"dbname"`
 }
 ​
 func (yam *YamlStruct) Load(filename string, v interface{}) {
   data, err := ioutil.ReadFile(filename)
   if err != nil {
     panic(err.Error())
   }
   err = yaml.Unmarshal(data, v)
   if err != nil {
     panic(err.Error())
   }
 }
 ​
 func main() {
   YamlStruct := NewYamlStruct()
   v := YamlConfig{}
   osGwd, _ := os.Getwd()
   confPath := osGwd + "/conf_yaml.yaml"
   YamlStruct.Load(confPath, &v)
   fmt.Printf("配置文件的数据为 %s \n", v.DataBase)
 }
 ​

3、INI 文件

 package main
 ​
 /*
  解析 ini 格式的配置文件
 文件内容如下:
 mode=debug
 ​
 [postgres]
 host=localhost
 port=5432
 username=postgres
 password=postgres
 dbname=bubble
  */
 ​
 import (
   "fmt"
   "github.com/go-ini/ini"
   "os"
 )
 ​
 //type Postgres struct {
 //  Host     string
 //  Port     uint
 //  Username string
 //  Password string
 //  DbName   string
 //}
 ​
 func main() {
   osGwd, _ := os.Getwd()
   confPath := osGwd + "/conf_ini.ini"
   config, err := ini.Load(confPath)
   if err != nil {
     panic(err.Error())
   }
   // 可以直接读取配置,并设置默认值
   mode := config.Section("").Key("mode").MustString("debug")
   fmt.Println(mode)
   postgres, err := config.GetSection("postgres")
   if err != nil {
     panic(err.Error())
   }
   // 可通过 Key 去取值
   fmt.Println(postgres.Key("host"))  // localhost
   fmt.Println(postgres.Keys())       //  [localhost 5432 postgres postgres bubble]
   fmt.Println(postgres.KeyStrings()) // [host port username password dbname]
 }
 ​
举报

相关推荐

0 条评论