Golang 多种配置文件解析
2022/1/23 8:04:11
本文主要是介绍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] }
这篇关于Golang 多种配置文件解析的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-15SendGrid 的 Go 客户端库怎么实现同时向多个邮箱发送邮件?-icode9专业技术文章分享
- 2024-11-15SendGrid 的 Go 客户端库怎么设置header 和 标签tag 呢?-icode9专业技术文章分享
- 2024-11-12Cargo deny安装指路
- 2024-11-02MongoDB项目实战:从入门到初级应用
- 2024-11-01随时随地一键转录,Google Cloud 新模型 Chirp 2 让语音识别更上一层楼
- 2024-10-25Google Cloud动手实验详解:如何在Cloud Run上开发无服务器应用
- 2024-10-24AI ?先驱齐聚 BAAI 2024,发布大规模语言、多模态、具身、生物计算以及 FlagOpen 2.0 等 AI 模型创新成果。
- 2024-10-20goland工具下,如修改一个项目的标准库SDK的版本-icode9专业技术文章分享
- 2024-10-17Go学习:初学者的简单教程
- 2024-10-17Go学习:新手入门完全指南