gitee.com/h79/goutils@v1.22.10/loader/file.go (about) 1 package loader 2 3 import ( 4 "gitee.com/h79/goutils/common/file" 5 ) 6 7 const ( 8 JsonFormat = "json" 9 XmlFormat = "xml" 10 YamlFormat = "yaml" 11 ) 12 13 type Filer struct { 14 Loader 15 path string 16 lastModifyTime int64 17 da interface{} 18 } 19 20 func NewFiler(path string, format string, data interface{}) *Loader { 21 l := &Filer{ 22 Loader: CreateLoader(), 23 path: path, 24 da: data, 25 } 26 return l.WithFormat(format).WithLoadFunc(l.load) 27 } 28 29 func (f *Filer) load() (interface{}, error) { 30 lastModify, data, err := file.DecodeFileModifyTime(f.path, f.lastModifyTime, func(v []byte) (interface{}, error) { 31 er := f.unmarshal.Unmarshal(v, f.da) 32 return f.da, er 33 }) 34 f.lastModifyTime = lastModify 35 return data, err 36 } 37 38 func JSON(filename string, data interface{}) error { 39 ll := NewFiler(filename, JsonFormat, data) 40 if err, _ := ll.Read(); err != nil { 41 return err 42 } 43 return nil 44 } 45 46 func XML(filename string, data interface{}) error { 47 ll := NewFiler(filename, XmlFormat, data) 48 if err, _ := ll.Read(); err != nil { 49 return err 50 } 51 return nil 52 } 53 54 func YAML(filename string, data interface{}) error { 55 ll := NewFiler(filename, YamlFormat, data) 56 if err, _ := ll.Read(); err != nil { 57 return err 58 } 59 return nil 60 }