代码拉取完成,页面将自动刷新
/*
* 一张表对应一个文件,多用于记录大致固定数量的信息。
* 例如某配置实体的列表等。
*/
package filedb
import (
"encoding/json"
"os"
"path/filepath"
"sync"
)
type Item[T any] struct {
Filepath string // 完整的文件路径
Perm os.FileMode // 文件权限,默认0644
lock sync.RWMutex // 读写锁
}
// 新建一个文件存储
func NewItem[T any](dirpath string, filename string) *Item[T] {
t := new(Item[T])
t.Filepath = filepath.Join(dirpath, filename)
t.Perm = 0644
t.lock = sync.RWMutex{}
return t
}
// 读取当前内容
func (t *Item[T]) Get() (data T, err error) {
t.lock.RLock()
defer t.lock.RUnlock()
content, err := os.ReadFile(t.Filepath)
if err != nil {
return
}
if err = json.Unmarshal(content, &data); err != nil {
return
}
return
}
// 写入新的内容
func (t *Item[T]) Set(data T) (err error) {
t.lock.Lock()
defer t.lock.Unlock()
content, err := json.Marshal(data)
if err != nil {
return
}
if err = os.WriteFile(t.Filepath, content, t.Perm); err != nil {
return
}
return
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。