package main import ( "os" "time" "gopkg.in/yaml.v3" ) type Config struct { Server ServerConfig `yaml:"server"` Collect CollectConfig `yaml:"collect"` Report ReportConfig `yaml:"report"` } type ServerConfig struct { URL string `yaml:"url"` Token string `yaml:"token"` } type CollectConfig struct { Interval time.Duration `yaml:"interval"` } type ReportConfig struct { Interval time.Duration `yaml:"interval"` } func LoadConfig(path string) (*Config, error) { cfg := &Config{ Server: ServerConfig{ URL: "http://localhost:8080", }, Collect: CollectConfig{ Interval: 30 * time.Second, }, Report: ReportConfig{ Interval: 60 * time.Second, }, } data, err := os.ReadFile(path) if err != nil { if os.IsNotExist(err) { data, _ = yaml.Marshal(cfg) os.WriteFile(path, data, 0644) return cfg, nil } return nil, err } if err := yaml.Unmarshal(data, cfg); err != nil { return nil, err } return cfg, nil } func SaveConfig(path string, cfg *Config) error { data, err := yaml.Marshal(cfg) if err != nil { return err } return os.WriteFile(path, data, 0644) }