2025-07-24 16:36:29 +08:00

70 lines
1.3 KiB
Go

package config
import (
"fmt"
"os"
"sync"
"gopkg.in/yaml.v3"
)
type ServerConfig struct {
UDPPort int `yaml:"udp_port"`
}
type DatabaseConfig struct {
Host string `yaml:"host"`
Port int `yaml:"port"`
User string `yaml:"user"`
Password string `yaml:"password"`
DBName string `yaml:"dbname"`
SSLMode string `yaml:"sslmode"`
}
type HeartbeatConfig struct {
Interval int `yaml:"interval"`
Message string `yaml:"message"`
}
type DeviceCheckConfig struct {
Interval int `yaml:"interval"`
Message string `yaml:"message"`
}
type Config struct {
Server ServerConfig `yaml:"server"`
Database DatabaseConfig `yaml:"database"`
Heartbeat HeartbeatConfig `yaml:"heartbeat"`
DeviceCheck DeviceCheckConfig `yaml:"device_check"`
}
var (
instance *Config
once sync.Once
)
func GetConfig() *Config {
once.Do(func() {
instance = &Config{}
err := instance.loadConfig()
if err != nil {
panic(fmt.Sprintf("加载配置文件失败: %v", err))
}
})
return instance
}
func (c *Config) loadConfig() error {
data, err := os.ReadFile("config.yaml")
if err != nil {
return fmt.Errorf("读取配置文件失败: %v", err)
}
err = yaml.Unmarshal(data, c)
if err != nil {
return fmt.Errorf("解析配置文件失败: %v", err)
}
return nil
}