package core import ( "encoding/json" "log" "os" "reflect" ) type DataClip struct { path string type_ any } func (receiver *DataClip) checkFileExists(filepath string) (bool, error) { if _, err := os.Stat(filepath); err == nil { return true, nil } else if os.IsNotExist(err) { return false, nil } else { return false, err } } func (receiver *DataClip) Setup(data interface{}) interface{} { if exists, err := receiver.checkFileExists(receiver.path); err == nil { if exists { // load data return receiver.LoadData() } else { // save default data receiver.SaveData(data) return data } } else { log.Fatal(err.Error()) } return data } func (receiver *DataClip) LoadData() interface{} { data, err := os.ReadFile(receiver.path) if err != nil { log.Fatalf("Failed to Read Data File: %v", err) } // 使用反射获取 defaultConfig 的类型 if err := json.Unmarshal(data, receiver.type_); err != nil { log.Fatalf("Failed to Unmarshal Data File: %v", err) } log.Printf("Loaded Data from File: %s", receiver.path) return reflect.ValueOf(receiver.type_).Elem().Interface() } func (receiver *DataClip) SaveData(data interface{}) { jsonData, err := json.MarshalIndent(data, "", " ") if err != nil { log.Fatalf("Error Encoding Default Data: %v", err) } if err := os.WriteFile(receiver.path, jsonData, 0644); err != nil { log.Fatalf("Failed to Write Default Data to File: %v", err) } log.Printf("Saved Default Data to File: %s", receiver.path) }