diff --git a/internal/config/config.go b/internal/config/config.go index 49bc1b8..debdc56 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -97,12 +97,30 @@ func Load(configPath string) error { } func Save(cfg *Config) error { + // 确保 data 目录存在 + if err := os.MkdirAll("./data", 0755); err != nil { + return fmt.Errorf("创建数据目录失败: %w", err) + } + viper.Set("server", cfg.Server) viper.Set("database", cfg.Database) viper.Set("redis", cfg.Redis) viper.Set("jwt", cfg.JWT) viper.Set("captcha", cfg.Captcha) + // 使用 SafeWriteConfig,如果文件不存在会自动创建 + configPath := "./data/config.yaml" + viper.SetConfigFile(configPath) + + // 检查文件是否存在,不存在则创建 + if _, err := os.Stat(configPath); os.IsNotExist(err) { + if err := viper.SafeWriteConfig(); err != nil { + return fmt.Errorf("创建配置文件失败: %w", err) + } + return nil + } + + // 文件已存在,直接写入 return viper.WriteConfig() }