go项目实现通过配置文件进行配置项统一管理
转载请注明出处:
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。