12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- package utils
- import (
- "encoding/json"
- "io/ioutil"
- "math/rand"
- "os"
- "sync"
- "time"
- )
- func SaveDb(lock *sync.Mutex, val interface{}, fileName string) (err error) {
- lock.Lock()
- defer lock.Unlock()
- content, _ := json.Marshal(val)
- tmpName := RandString(16)
- err = ioutil.WriteFile(tmpName, content, 0666) //写入文件(字节数组)
- if err != nil {
- os.Remove(tmpName)
- panic("cannot SaveToBak, err:" + err.Error())
- } else {
- if exist, _ := PathExists(fileName); exist {
- if err := os.Remove(fileName); err != nil {
- panic("cannot remove, err:" + err.Error())
- }
- }
- if err := os.Rename(tmpName, fileName); err != nil {
- panic("cannot SaveToBak, err:" + err.Error())
- }
- }
- return
- }
- func LoadDb(lock *sync.Mutex, fileName string, val interface{}) (err error) {
- file, err := os.OpenFile(fileName, os.O_RDONLY, 0666)
- if err != nil {
- return
- }
- content, err := ioutil.ReadAll(file)
- if err != nil {
- return
- }
- err = json.Unmarshal(content, val)
- return
- }
- func RandString(len int) string {
- r := rand.New(rand.NewSource(time.Now().UnixNano()))
- bytes := make([]byte, len)
- for i := 0; i < len; i++ {
- b := r.Intn(26) + 65
- bytes[i] = byte(b)
- }
- return string(bytes)
- }
|