You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

79 lines
1.5 KiB
Go

package config
import (
"fmt"
"os"
"gopkg.in/yaml.v3"
)
// Config 应用配置
type Config struct {
Gin GinConfig `json:"gin" yaml:"gin"`
}
// GinConfig Gin配置
type GinConfig struct {
Port string `json:"port" yaml:"port"`
}
// getDefaultConfig 获取默认配置
func getDefaultConfig() *Config {
return &Config{
Gin: GinConfig{
Port: "8850",
},
}
}
// loadFromFile 从配置文件加载配置
func loadFromFile() (*Config, error) {
configPaths := []string{
"./config.yaml",
}
for _, path := range configPaths {
if _, err := os.Stat(path); err == nil {
data, err := os.ReadFile(path)
if err != nil {
return nil, fmt.Errorf("read config file error: %w", err)
}
var config Config
if err := yaml.Unmarshal(data, &config); err != nil {
return nil, fmt.Errorf("unmarshal config file error: %w", err)
}
return &config, nil
}
}
return nil, nil
}
// loadFromEnv 从环境变量加载配置
func loadFromEnv(config *Config) {
// 加载 Gin 配置
if port := os.Getenv("GIN_PORT"); port != "" {
config.Gin.Port = port
}
}
// GetConfig 获取配置
func GetConfig() *Config {
// 先加载默认配置
config := getDefaultConfig()
// 再从配置文件加载
if fileConfig, err := loadFromFile(); err == nil && fileConfig != nil {
// 合并配置文件中的配置
if fileConfig.Gin.Port != "" {
config.Gin.Port = fileConfig.Gin.Port
}
}
// 最后从环境变量加载
loadFromEnv(config)
return config
}