go项目实现在配置文件实现配置项统一管理
阅读原文时间:2023年09月07日阅读:1

转载请注明出处:

  go项目中实现配置项统一管理,实现逻辑:将 配置项整理为一个json的数据结构,并保存到go.conf文件中,然后在go项目启动main方法中加载 go.conf 文件,读取go.conf 文件的json 数据结构,并进行反序列化为go的数据结构,从而在go项目中可以全局使用 go.conf 文件中的配置项。

实现:

  首先,创建一个名为 go.conf 的 JSON 格式的配置文件,内容如下:

{
"database": {
"host": "localhost",
"port": 3306,
"username": "root",
"password": "password"
},
"api": {
"url": "https://api.example.com",
"key": "abcdef123456"
},
"logger": {
"level": "info",
"file": "/var/log/app.log"
}
}

  接下来,在 Go 项目中,创建一个结构体来映射这些配置项:

package main

import (
"encoding/json"
"fmt"
"io/ioutil"
)

type Config struct {
Database struct {
Host string `json:"host"`
Port int `json:"port"`
Username string `json:"username"`
Password string `json:"password"`
} `json:"database"`
API struct {
URL string `json:"url"`
Key string `json:"key"`
} `json:"api"`
Logger struct {
Level string `json:"level"`
File string `json:"file"`
} `json:"logger"`
}

func main() {
// 读取配置文件
configData, err := ioutil.ReadFile("go.conf")
if err != nil {
fmt.Println("无法读取配置文件:", err)
return
}

// 将配置文件解析到 Config 结构体中  
var config Config  
err = json.Unmarshal(configData, &config)  
if err != nil {  
    fmt.Println("无法解析配置文件:", err)  
    return  
}

// 使用配置项  
fmt.Println("数据库主机:", config.Database.Host)  
fmt.Println("数据库端口:", config.Database.Port)  
fmt.Println("API URL:", config.API.URL)  
fmt.Println("API 密钥:", config.API.Key)  
fmt.Println("日志级别:", config.Logger.Level)  
fmt.Println("日志文件:", config.Logger.File)  

}

  在以上示例代码中,创建了一个名为 Config 的结构体来映射配置文件中的配置项。结构体的字段名和类型需要和配置文件保持一致。

  在主函数中,我们使用相同的方式读取和解析配置文件。然后,可以直接访问 Config 结构体的成员来使用配置项。例如,config.Database.Host 可以获取数据库主机名,config.API.URL 可以获取 API 的 URL。