package config import ( "time" "github.com/caarlos0/env/v8" "github.com/joho/godotenv" ) type Config struct { Server struct { Host string `env:"SERVER_HOST" env-default:"localhost"` Port string `env:"SERVER_PORT" env-default:"8080"` } Database struct { DSN string `env:"DB_DSN,required"` } Auth struct { AccessTokenSecret string `env:"ACCESS_TOKEN_SECRET,required"` RefreshTokenSecret string `env:"REFRESH_TOKEN_SECRET,required"` AccessTokenExpiry time.Duration `env:"ACCESS_TOKEN_EXPIRY" env-default:"15m"` RefreshTokenExpiry time.Duration `env:"REFRESH_TOKEN_EXPIRY" env-default:"168h"` // 7 дней } SMTP struct { Host string `env:"SMTP_HOST,required"` Port int `env:"SMTP_PORT,required"` Username string `env:"SMTP_USERNAME,required"` Password string `env:"SMTP_PASSWORD,required"` From string `env:"SMTP_FROM,required"` URL string `env:"AppURL,required"` } GRPC struct { MessageServiceAddress string `env:"MESSAGE_SERVICE_ADDRESS"` SubscribeServiceAddress string `env:"SUBSCRIBE_SERVICE_ADDRESS"` ClipServiceAddress string `env:"CLIP_SERVICE_ADDRESS"` } } func Load() (*Config, error) { // Пытаемся загрузить .env файл (если он есть) // Игнорируем ошибку, если файла нет _ = godotenv.Load() cfg := &Config{} if err := env.Parse(cfg); err != nil { return nil, err } return cfg, nil }