first
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
package storage
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"io/ioutil"
|
||||
|
||||
"git.trj.tw/golang/utils"
|
||||
)
|
||||
|
||||
// Storage -
|
||||
type Storage struct {
|
||||
m map[string]interface{}
|
||||
filePath string
|
||||
}
|
||||
|
||||
var s *Storage
|
||||
|
||||
// New storage
|
||||
func New() *Storage {
|
||||
if s == nil {
|
||||
s = &Storage{
|
||||
m: make(map[string]interface{}),
|
||||
}
|
||||
}
|
||||
return s
|
||||
}
|
||||
|
||||
// Get storage
|
||||
func Get() *Storage { return s }
|
||||
|
||||
// Load storage data from file
|
||||
func (p *Storage) Load(filePath string) (err error) {
|
||||
filePath = utils.ParsePath(filePath)
|
||||
if !utils.CheckExists(filePath, false) {
|
||||
return errors.New("storage file not found")
|
||||
}
|
||||
p.filePath = filePath
|
||||
|
||||
b, err := ioutil.ReadFile(filePath)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
err = json.Unmarshal(b, &p.m)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (p *Storage) Write() (err error) {
|
||||
b, err := json.Marshal(p.m)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
err = ioutil.WriteFile(p.filePath, b, 0664)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// Get data by key
|
||||
func (p *Storage) Get(key string) (data interface{}, ok bool) {
|
||||
data, ok = p.m[key]
|
||||
return
|
||||
}
|
||||
|
||||
// Set data by key
|
||||
func (p *Storage) Set(key string, value interface{}) { p.m[key] = value }
|
||||
|
||||
// Delete data by key
|
||||
func (p *Storage) Delete(key string) { delete(p.m, key) }
|
||||
Reference in New Issue
Block a user