Files
VLoop/backend/internal/config/loadconfig.go

94 lines
1.9 KiB
Go
Raw Normal View History

package config
import (
"fmt"
"os"
"errors"
"gopkg.in/yaml.v3"
)
type Config struct {
Server ServerConfig `yaml:"server"`
Database DatabaseConfig `yaml:"database"`
2025-12-29 04:13:13 +08:00
Redis RedisConfig `yaml:"redis"`
RabbitMQ RabbitMQConfig `yaml:"rabbitmq"`
}
type ServerConfig struct {
2025-12-23 02:21:33 +08:00
Port int `yaml:"port"`
}
type DatabaseConfig struct {
Host string `yaml:"host"`
2025-12-23 02:21:33 +08:00
Port int `yaml:"port"`
User string `yaml:"user"`
Password string `yaml:"password"`
DBName string `yaml:"dbname"`
}
2025-12-29 04:13:13 +08:00
type RedisConfig struct {
Host string `yaml:"host"`
Port int `yaml:"port"`
Password string `yaml:"password"`
DB int `yaml:"db"`
}
type RabbitMQConfig struct {
Host string `yaml:"host"`
Port int `yaml:"port"`
Username string `yaml:"username"`
Password string `yaml:"password"`
}
func Load(filename string) (Config, error) {
data, err := os.ReadFile(filename)
if err != nil {
return Config{}, fmt.Errorf("failed to read config file: %w", err)
}
var cfg Config
if err := yaml.Unmarshal(data, &cfg); err != nil {
return Config{}, fmt.Errorf("parse config %s: %w", filename, err)
}
return cfg, nil
}
// bool用来表示是否使用了默认配置true表示使用了默认配置
func LoadLocalDev(filename string) (Config, bool, error) {
cfg, err := Load(filename)
if err == nil {
return cfg, false, nil
}
if errors.Is(err, os.ErrNotExist) {
return DefaultLocalConfig(), true, nil
}
return Config{}, false, err
}
func DefaultLocalConfig() Config {
return Config{
Server: ServerConfig{
Port: 8080,
},
Database: DatabaseConfig{
Host: "localhost",
Port: 3306,
User: "root",
Password: "123456",
DBName: "feedsystem",
},
Redis: RedisConfig{
Host: "localhost",
Port: 6379,
Password: "123456",
DB: 0,
},
RabbitMQ: RabbitMQConfig{
Host: "localhost",
Port: 5672,
Username: "admin",
Password: "password123",
},
}
}