package toml import ( "errors" "fmt" "os" "path/filepath" "github.com/spf13/viper" ) // CreateFileIfNotExists 创建文件,如果文件已存在则返回错误 func CreateFileIfNotExists(filename string) error { // 获取当前工作目录 projectDir, err := os.Getwd() if err != nil { return errors.New("无法获取当前工作目录: " + err.Error()) } fmt.Println("当前工作目录", projectDir) // 检查文件是否存在 if _, err := os.Stat(filename); err == nil { return errors.New("文件已存在") } else if !os.IsNotExist(err) { return err // 返回其他错误 } // 确保目录存在 dir := filepath.Dir(filename) if err := os.MkdirAll(dir, os.ModePerm); err != nil { return errors.New("无法创建目录: " + err.Error()) } // 创建文件 file, err := os.Create(filename) if err != nil { return errors.New("无法创建文件: " + err.Error()) } defer file.Close() return nil } // CreateTOMLGoups 在指定的 TOML 文件中创建组 func CreateTOMLGoups(filename string, groups map[string]interface{}) error { v := viper.New() v.SetConfigFile(filename) v.SetConfigType("toml") // 检查文件是否存在 if _, err := os.Stat(filename); os.IsNotExist(err) { return errors.New("文件不存在") } // 读取现有的配置文件 if err := v.ReadInConfig(); err != nil { return errors.New("无法读取配置文件: " + err.Error()) } // 打印读取的配置以进行调试 fmt.Println("现有配置:", v.AllSettings()) // 设置组和默认值 for group, defaultValue := range groups { if !v.IsSet(group) { // 仅在组不存在时设置 fmt.Println("设置组:", group) v.Set(group, defaultValue) } } // 强制写入文件 if err := v.WriteConfigAs(filename); err != nil { return errors.New("无法写入配置文件: " + err.Error()) } // 打印写入后的配置以进行调试 fmt.Println("更新后的配置:", v.AllSettings()) return nil }