修改配置文件读取跟保存的方法
This commit is contained in:
@@ -2,6 +2,7 @@ package config
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
"gopkg.in/yaml.v3"
|
"gopkg.in/yaml.v3"
|
||||||
@@ -44,16 +45,17 @@ func DefaultAppConfig() *AppConfig {
|
|||||||
func LoadConfig(path string) (*AppConfig, error) {
|
func LoadConfig(path string) (*AppConfig, error) {
|
||||||
cfg := DefaultAppConfig()
|
cfg := DefaultAppConfig()
|
||||||
|
|
||||||
data, err := os.ReadFile(path)
|
f, err := os.Open(path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if os.IsNotExist(err) {
|
if os.IsNotExist(err) {
|
||||||
// 配置文件不存在,返回默认配置
|
// 配置文件不存在,返回默认配置
|
||||||
return cfg, nil
|
return cfg, nil
|
||||||
}
|
}
|
||||||
return nil, fmt.Errorf("读取配置文件失败: %w", err)
|
return nil, fmt.Errorf("打开配置文件失败: %w", err)
|
||||||
}
|
}
|
||||||
|
defer f.Close()
|
||||||
|
|
||||||
if err := yaml.Unmarshal(data, cfg); err != nil {
|
if err := yaml.NewDecoder(f).Decode(cfg); err != nil && err != io.EOF {
|
||||||
return nil, fmt.Errorf("解析配置文件失败: %w", err)
|
return nil, fmt.Errorf("解析配置文件失败: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -62,14 +64,17 @@ func LoadConfig(path string) (*AppConfig, error) {
|
|||||||
|
|
||||||
// SaveConfig 将配置保存到指定路径
|
// SaveConfig 将配置保存到指定路径
|
||||||
func SaveConfig(path string, cfg *AppConfig) error {
|
func SaveConfig(path string, cfg *AppConfig) error {
|
||||||
data, err := yaml.Marshal(cfg)
|
f, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0o644)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("序列化配置失败: %w", err)
|
return fmt.Errorf("创建配置文件失败: %w", err)
|
||||||
}
|
}
|
||||||
|
defer f.Close()
|
||||||
|
|
||||||
if err := os.WriteFile(path, data, 0o644); err != nil {
|
enc := yaml.NewEncoder(f)
|
||||||
|
enc.SetIndent(2)
|
||||||
|
if err := enc.Encode(cfg); err != nil {
|
||||||
return fmt.Errorf("写入配置文件失败: %w", err)
|
return fmt.Errorf("写入配置文件失败: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return enc.Close()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user