package helper import ( "os" "reflect" ) func FileExists(filePath string) bool { _, err := os.Stat(filePath) return err == nil || os.IsExist(err) } // DeepCopy 深拷贝函数 func DeepCopy(src interface{}) interface{} { if src == nil { return nil } t := reflect.TypeOf(src) v := reflect.ValueOf(src) // 创建新的对象 dst := reflect.New(t.Elem()).Elem() // 遍历结构体的所有字段 for i := 0; i < t.Elem().NumField(); i++ { field := t.Elem().Field(i) srcField := v.Elem().Field(i) dstField := dst.Field(i) // 处理不同类型的字段 switch field.Type.Kind() { case reflect.Map: // 处理映射类型 newMap := reflect.MakeMap(field.Type) for _, key := range srcField.MapKeys() { value := srcField.MapIndex(key) newMap.SetMapIndex(key, value) } dstField.Set(newMap) case reflect.Slice: // 处理切片类型 newSlice := reflect.MakeSlice(field.Type, srcField.Len(), srcField.Cap()) reflect.Copy(newSlice, srcField) dstField.Set(newSlice) case reflect.Ptr: // 处理指针类型 if !srcField.IsNil() { newPtr := reflect.New(field.Type.Elem()) newPtr.Elem().Set(DeepCopy(srcField.Elem()).(reflect.Value)) dstField.Set(newPtr) } default: // 处理其他类型 dstField.Set(srcField) } } return dst.Interface() }