toml.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package toml
  2. import (
  3. "errors"
  4. "fmt"
  5. "os"
  6. "path/filepath"
  7. "github.com/spf13/viper"
  8. )
  9. // CreateFileIfNotExists 创建文件,如果文件已存在则返回错误
  10. func CreateFileIfNotExists(filename string) error {
  11. // 获取当前工作目录
  12. projectDir, err := os.Getwd()
  13. if err != nil {
  14. return errors.New("无法获取当前工作目录: " + err.Error())
  15. }
  16. fmt.Println("当前工作目录", projectDir)
  17. // 检查文件是否存在
  18. if _, err := os.Stat(filename); err == nil {
  19. return errors.New("文件已存在")
  20. } else if !os.IsNotExist(err) {
  21. return err // 返回其他错误
  22. }
  23. // 确保目录存在
  24. dir := filepath.Dir(filename)
  25. if err := os.MkdirAll(dir, os.ModePerm); err != nil {
  26. return errors.New("无法创建目录: " + err.Error())
  27. }
  28. // 创建文件
  29. file, err := os.Create(filename)
  30. if err != nil {
  31. return errors.New("无法创建文件: " + err.Error())
  32. }
  33. defer file.Close()
  34. return nil
  35. }
  36. // CreateTOMLGoups 在指定的 TOML 文件中创建组
  37. func CreateTOMLGoups(filename string, groups map[string]interface{}) error {
  38. v := viper.New()
  39. v.SetConfigFile(filename)
  40. v.SetConfigType("toml")
  41. // 检查文件是否存在
  42. if _, err := os.Stat(filename); os.IsNotExist(err) {
  43. return errors.New("文件不存在")
  44. }
  45. // 读取现有的配置文件
  46. if err := v.ReadInConfig(); err != nil {
  47. return errors.New("无法读取配置文件: " + err.Error())
  48. }
  49. // 打印读取的配置以进行调试
  50. fmt.Println("现有配置:", v.AllSettings())
  51. // 设置组和默认值
  52. for group, defaultValue := range groups {
  53. if !v.IsSet(group) { // 仅在组不存在时设置
  54. fmt.Println("设置组:", group)
  55. v.Set(group, defaultValue)
  56. }
  57. }
  58. // 强制写入文件
  59. if err := v.WriteConfigAs(filename); err != nil {
  60. return errors.New("无法写入配置文件: " + err.Error())
  61. }
  62. // 打印写入后的配置以进行调试
  63. fmt.Println("更新后的配置:", v.AllSettings())
  64. return nil
  65. }