首页 > 其他分享 >go标准库encoding/gob使用

go标准库encoding/gob使用

时间:2024-10-08 15:33:55浏览次数:1  
标签:fp return err encoding items cache gob mu go

func (c *cache) Save(w io.Writer) (err error) {
enc := gob.NewEncoder(w)
defer func() {
if x := recover(); x != nil {
err = fmt.Errorf("Error registering item types with Gob library")
}
}()
c.mu.RLock()
defer c.mu.RUnlock()
for _, v := range c.items {
gob.Register(v.Object)
}
err = enc.Encode(&c.items)
return
}

// Save the cache's items to the given filename, creating the file if it
// doesn't exist, and overwriting it if it does.
//
// NOTE: This method is deprecated in favor of c.Items() and NewFrom() (see the
// documentation for NewFrom().)
func (c *cache) SaveFile(fname string) error {
fp, err := os.Create(fname)
if err != nil {
return err
}
err = c.Save(fp)
if err != nil {
fp.Close()
return err
}
return fp.Close()
}

// Add (Gob-serialized) cache items from an io.Reader, excluding any items with
// keys that already exist (and haven't expired) in the current cache.
//
// NOTE: This method is deprecated in favor of c.Items() and NewFrom() (see the
// documentation for NewFrom().)
func (c *cache) Load(r io.Reader) error {
dec := gob.NewDecoder(r)
items := map[string]Item{}
err := dec.Decode(&items)
if err == nil {
c.mu.Lock()
defer c.mu.Unlock()
for k, v := range items {
ov, found := c.items[k]
if !found || ov.Expired() {
c.items[k] = v
}
}
}
return err
}

// Load and add cache items from the given filename, excluding any items with
// keys that already exist in the current cache.
//
// NOTE: This method is deprecated in favor of c.Items() and NewFrom() (see the
// documentation for NewFrom().)
func (c *cache) LoadFile(fname string) error {
fp, err := os.Open(fname)
if err != nil {
return err
}
err = c.Load(fp)
if err != nil {
fp.Close()
return err
}
return fp.Close()
}

// Copies all unexpired items in the cache into a new map and returns it.
func (c *cache) Items() map[string]Item {
c.mu.RLock()
defer c.mu.RUnlock()
m := make(map[string]Item, len(c.items))
now := time.Now().UnixNano()
for k, v := range c.items {
// "Inlining" of Expired
if v.Expiration > 0 {
if now > v.Expiration {
continue
}
}
m[k] = v
}
return m
}

// Returns the number of items in the cache. This may include items that have
// expired, but have not yet been cleaned up.
func (c *cache) ItemCount() int {
c.mu.RLock()
n := len(c.items)
c.mu.RUnlock()
return n
}

标签:fp,return,err,encoding,items,cache,gob,mu,go
From: https://www.cnblogs.com/cheyunhua/p/18451741

相关文章

  • 【开题报告】基于django+vue楼盘销售系统(论文+源码) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着房地产行业的蓬勃发展,楼盘销售管理的复杂性和效率要求日益提升。传统的手工记录与线下销售模式已难以满足当前市场快速变化的需求。特......
  • <免费开题>登录网站验证码的生成与识别系统(django)|全套源码+文章lw+毕业设计+课程设计
    <免费开题>登录网站验证码的生成与识别系统(django)|全套源码+文章lw+毕业设计+课程设计+数据库+ppt摘要近年来随着互联网应用技术的飞速发展,为了确保网站系统平台的安全性,各类网站相继推出了验证码应用技术,通过验证码的应用来帮助缓解暴力破解账户密码、垃圾邮件攻击以及在......
  • MongoDB 用户权限管理,复制集,分片集群,备份恢复 rocky使用
    1MongoDB介绍1.4什么时候使用MongoDB1.数据量是有亿万级或者需要不断扩容2.需要2000-3000以上的读写每秒3.新应用,需求会变,数据模型无法确定4.需要整合多个外部数据源5.系统需要99.999%高可用6.系统需要大量的地理位置查询7.系统需要提供最小的latency8.管理的主要数......
  • CRICOS Data Structures and AlgorithmsHash Tables
    DataStructuresandAlgorithmsHashTablesPage1of3CRICOSProvideCode:00301J Note:hashArraystoresthekey,valueandstate(used,free,orpreviously-used)ofeveryhashEntry.WemuststoreboththekeyandvaluesinceweneedtocheckhashArrayto......
  • GUI图形界面 无代码开发 原理 - 属性标识链 | uiotos致敬amis、nodered、appsmith、co
    低代码饱受争议。也有例外:后端NodeRed,前端Amis。整体还是诟病为主:简单业务可以,复杂的是扯淡,不论前后端。这是一贯的认知。在GUI方面,UIOTOS发明的嵌套技术,为复杂前端的无代码开发,开辟了一条新的思路。往期文章:可视化拖拉拽?过时了!组态零代码,不能做复杂前端?嵌套原理一复杂交互......
  • 组态也能开发WEB前端 | uiotos致敬amis、nodered、appsmith、codewave、goview、datar
    WEB组态开发SCADA、HMI画面、大屏可视化,还比较常见。比如下面: UIOTOS组态示例那么常规WEB前端功能,组态能否一并做了呢?比如下面这种: UIOTOS前端示例答案是可以的!UIOTOS支持页面无限嵌套,能实现原型即应用。现在就以一个具体小示例介绍如何实现的。效果如下所示,初......
  • [含文档+PPT+源码等]精品大数据项目-Django基于朴素贝叶斯实现的乡村旅游评论分析系统
    大数据项目——Django基于朴素贝叶斯实现的乡村旅游评论分析系统背景,可以从以下几个方面进行详细阐述:一、项目背景与意义随着乡村旅游的蓬勃发展和游客对旅游体验要求的日益提高,乡村旅游评论成为游客反馈旅游体验、旅游企业了解市场动态和游客行为的重要途径。然而,传统的评论......
  • [含文档+PPT+源码等]精品大数据项目-基于Django实现的汽车数据分析与可视化系统
    大数据项目——基于Django实现的汽车数据分析与可视化系统背景,可以从以下几个方面进行详细阐述:一、项目背景与意义在数字化和信息化的时代背景下,汽车行业正面临着前所未有的机遇与挑战。随着市场竞争的加剧、消费者需求的多样化以及技术的不断进步,汽车企业需要对市场进行深入......
  • django rest_framework面经
    1、什么是drf组件drf的全称是DjangoRESTfulFramework;它是一个基于django开发的组件,本质是一个django的app;drf可以帮我们快速开发出一个遵循restful规范的程序。2、drf组件提供的功能1.免除csrf认证2.视图(三种:(1)APIView,(2)ListAPIview,(3)GenericViewSet)3.版本处理4......
  • Golang反射解说
    在Go语言中,反射(Reflection)是一种强大的机制,允许程序在运行时检查、修改和操作变量的类型信息。反射主要用于处理那些在编译时无法确定类型的情况,比如处理接口类型的值、实现通用的函数等。Go语言中反射的基本概念和用法:基本概念1.反射类型(reflect.Type):表示Go语言中的任何类......