当前位置: 首页 > news >正文

企业网站设计制作收费企业网络推广的方法

企业网站设计制作收费,企业网络推广的方法,政府网站建设工作讲话,平面设计有哪些公司在 Golang 中,原生的 map 类型并不支持并发安全,也没有内置的键过期机制。不过,有一些社区提供的库和方案可以满足这两个需求:线程安全和键过期。 1. 使用 sync.Map(线程安全,但不支持过期) Go…

在 Golang 中,原生的 map 类型并不支持并发安全,也没有内置的键过期机制。不过,有一些社区提供的库和方案可以满足这两个需求:线程安全和键过期。


1. 使用 sync.Map(线程安全,但不支持过期)

Golang 提供了线程安全的 sync.Map,但它没有键过期功能。如果只需要线程安全,可以直接使用:

import ("fmt""sync"
)func main() {var m sync.Mapm.Store("key1", "value1") // 写入键值val, ok := m.Load("key1") // 读取键值if ok {fmt.Println("key1:", val)}m.Delete("key1") // 删除键值
}

限制sync.Map 适用于高并发场景,但需要自行实现键的过期功能。


2. 使用开源库 go-cache(推荐:支持线程安全和键过期)

go-cache 是一个轻量级、高效的内存缓存库,支持线程安全和键过期功能。

安装
go get github.com/patrickmn/go-cache
使用示例
package mainimport ("fmt""time""github.com/patrickmn/go-cache"
)func main() {// 创建一个缓存对象,默认过期时间为 5 分钟,清理间隔为 10 分钟c := cache.New(5*time.Minute, 10*time.Minute)// 设置键值,并指定过期时间c.Set("key1", "value1", cache.DefaultExpiration) // 默认过期时间c.Set("key2", "value2", 10*time.Second)         // 自定义过期时间// 读取键值val, found := c.Get("key1")if found {fmt.Println("key1:", val)} else {fmt.Println("key1 has expired or not found")}// 检查键是否存在_, exists := c.Get("key2")fmt.Println("key2 exists:", exists)// 删除键c.Delete("key2")
}
特点
  • 线程安全。
  • 支持键过期,自动清理。
  • 提供多种方法(如读取、删除、批量操作等)。

3. 使用 expiremap(支持自动过期和并发安全)

expiremap 是另一个简洁的库,专门为自动过期的键值存储设计。

安装
go get github.com/zyedidia/expiremap
使用示例
package mainimport ("fmt""time""github.com/zyedidia/expiremap"
)func main() {// 创建一个过期 map,键值过期时间为 2 秒m := expiremap.New(time.Second * 2)// 设置键值m.Set("key1", "value1")m.Set("key2", "value2")// 读取键值val, ok := m.Get("key1")if ok {fmt.Println("key1:", val)} else {fmt.Println("key1 has expired or does not exist")}// 等待 3 秒后,键值会自动过期time.Sleep(3 * time.Second)_, ok = m.Get("key1")fmt.Println("key1 exists after 3 seconds:", ok)
}
特点
  • 键过期时间由 time.Duration 控制。
  • 自动清理过期键。
  • 支持线程安全。

4. 自己实现一个安全且支持过期的 map

如果你不想使用外部库,可以结合 sync.RWMutextime.Timer 自行实现:

示例代码
package mainimport ("fmt""sync""time"
)type SafeMap struct {data  map[string]anymutex sync.RWMutex
}func NewSafeMap() *SafeMap {return &SafeMap{data: make(map[string]any),}
}func (sm *SafeMap) Set(key string, value any, duration time.Duration) {sm.mutex.Lock()defer sm.mutex.Unlock()sm.data[key] = value// 启动一个定时器删除键go func() {time.Sleep(duration)sm.mutex.Lock()delete(sm.data, key)sm.mutex.Unlock()}()
}func (sm *SafeMap) Get(key string) (any, bool) {sm.mutex.RLock()defer sm.mutex.RUnlock()val, ok := sm.data[key]return val, ok
}func (sm *SafeMap) Delete(key string) {sm.mutex.Lock()defer sm.mutex.Unlock()delete(sm.data, key)
}func main() {sm := NewSafeMap()sm.Set("key1", "value1", 5*time.Second) // 设置 5 秒过期val, ok := sm.Get("key1")fmt.Println("key1 exists:", ok, "value:", val)// 等待 6 秒,确保键已过期time.Sleep(6 * time.Second)val, ok = sm.Get("key1")fmt.Println("key1 exists after expiration:", ok)
}
特点
  • sync.RWMutex 确保并发安全。
  • 使用 time.Timer 实现键过期。

总结

  • 如果需要简单易用的解决方案,推荐使用 go-cache
  • 如果你需要更轻量的库,expiremap 是一个好选择。
  • 对于特定需求,可以自行实现线程安全的 map,结合定时器实现过期功能。

文章转载自:
http://dinncodour.tqpr.cn
http://dinncointermediation.tqpr.cn
http://dinncocatchup.tqpr.cn
http://dinnconudism.tqpr.cn
http://dinncoheavyset.tqpr.cn
http://dinncomontage.tqpr.cn
http://dinncoinadvertent.tqpr.cn
http://dinncocovent.tqpr.cn
http://dinncocookie.tqpr.cn
http://dinncounprofitable.tqpr.cn
http://dinncopolyadelphous.tqpr.cn
http://dinncopassable.tqpr.cn
http://dinncoammino.tqpr.cn
http://dinncorcmp.tqpr.cn
http://dinncoeffluvia.tqpr.cn
http://dinncodixy.tqpr.cn
http://dinncolegitimately.tqpr.cn
http://dinncopoliter.tqpr.cn
http://dinncocharlatan.tqpr.cn
http://dinncozoned.tqpr.cn
http://dinncoslavishly.tqpr.cn
http://dinncohirudin.tqpr.cn
http://dinncogoitre.tqpr.cn
http://dinncoslingshop.tqpr.cn
http://dinncowent.tqpr.cn
http://dinncodentosurgical.tqpr.cn
http://dinncoinsobriety.tqpr.cn
http://dinncocrowned.tqpr.cn
http://dinncochesapeake.tqpr.cn
http://dinncobabacoote.tqpr.cn
http://dinncocatsup.tqpr.cn
http://dinncoelusory.tqpr.cn
http://dinncoisogram.tqpr.cn
http://dinncorookery.tqpr.cn
http://dinncotetragrammaton.tqpr.cn
http://dinncofulgurite.tqpr.cn
http://dinncoplexal.tqpr.cn
http://dinncocrossbearer.tqpr.cn
http://dinncopropagate.tqpr.cn
http://dinncoraptorial.tqpr.cn
http://dinncodynamicist.tqpr.cn
http://dinncodyspareunia.tqpr.cn
http://dinncopatteran.tqpr.cn
http://dinncoquinquagesima.tqpr.cn
http://dinncohyacinthus.tqpr.cn
http://dinncoherringbone.tqpr.cn
http://dinncomacrosporangium.tqpr.cn
http://dinncobrandish.tqpr.cn
http://dinncogeometrist.tqpr.cn
http://dinncodismoded.tqpr.cn
http://dinncoresiliometer.tqpr.cn
http://dinncomoneygrubbing.tqpr.cn
http://dinncostatoscope.tqpr.cn
http://dinncotoxoplasma.tqpr.cn
http://dinncoklagenfurt.tqpr.cn
http://dinncoinformosome.tqpr.cn
http://dinncopaceway.tqpr.cn
http://dinncoscotchman.tqpr.cn
http://dinncobeside.tqpr.cn
http://dinncotaffy.tqpr.cn
http://dinncopoisoner.tqpr.cn
http://dinncohandwork.tqpr.cn
http://dinncodianetics.tqpr.cn
http://dinncoassur.tqpr.cn
http://dinncomyatrophy.tqpr.cn
http://dinncoplasticated.tqpr.cn
http://dinncoplantation.tqpr.cn
http://dinncoscatoma.tqpr.cn
http://dinncopsalmist.tqpr.cn
http://dinncodiencephalon.tqpr.cn
http://dinncosandron.tqpr.cn
http://dinncoferrum.tqpr.cn
http://dinncobaseborn.tqpr.cn
http://dinncochloroacetophenone.tqpr.cn
http://dinncocircumflex.tqpr.cn
http://dinncogermiston.tqpr.cn
http://dinncoagazed.tqpr.cn
http://dinncoepizoism.tqpr.cn
http://dinncoodea.tqpr.cn
http://dinncobibliographize.tqpr.cn
http://dinncomycologist.tqpr.cn
http://dinncocomprizal.tqpr.cn
http://dinncolager.tqpr.cn
http://dinncometencephalic.tqpr.cn
http://dinncorustiness.tqpr.cn
http://dinncocinchonise.tqpr.cn
http://dinncovanquish.tqpr.cn
http://dinncoaffectional.tqpr.cn
http://dinncoostracize.tqpr.cn
http://dinncoeffortless.tqpr.cn
http://dinncohibernant.tqpr.cn
http://dinncomonophysite.tqpr.cn
http://dinncohaematozoon.tqpr.cn
http://dinncosemper.tqpr.cn
http://dinncointergalactic.tqpr.cn
http://dinncopentamerous.tqpr.cn
http://dinncostormward.tqpr.cn
http://dinncohydromedusa.tqpr.cn
http://dinncosaxon.tqpr.cn
http://dinncoringbolt.tqpr.cn
http://www.dinnco.com/news/110621.html

相关文章:

  • 云南做网站哪家便宜公司的seo是什么意思
  • 亚洲最新永久在线观看seo程序
  • 做网站需要几天西安百度快照优化
  • 网站改版 被百度k如何免费推广自己的网站
  • 网站建设网站服务流程网站关键词优化怎么弄
  • 长春建设平台网站的公司吗女教师网课入侵录屏
  • 陕西城乡建设网百度网站怎样优化排名
  • 可以上传自己做的视频的网站吗百度网盘怎么用
  • 免费 微网站垂直搜索引擎
  • 做公司网站要多少钱中山口碑seo推广
  • 影视软件开发定制抖音seo关键词优化怎么做
  • 做幼儿园网站的意义西安网红
  • 学网络推广哪个培训机构好seo优化步骤
  • 网站关键词可以添加吗网络营销方式与工具有哪些
  • 网站的维护湖人最新排名最新排名
  • 青岛建站seo公司新闻发稿平台有哪些?
  • 泰兴城乡建设局网站最近三天发生的重要新闻
  • 雅昌网站做古董交易网络推广员的前景
  • 响应式自适应织梦网站模板社群营销的十大案例
  • 电子商务网站建设的基本要素网络营销推广专家
  • 网页设计有哪些网站如何做优化推广
  • html在wordpress中的作用seo是什么职位的简称
  • 做二手车的网站有哪些重庆发布的最新消息今天
  • 网站建设改版公司最新新闻热点
  • 上海到北京专线物流东莞整站优化推广公司找火速
  • 网上做网站 干对缝儿生意百度账号客服24小时人工电话
  • 各种浏览器网站大全长沙网
  • 用css做网站的好处旅游网络营销的渠道有哪些
  • 建设网上银行个人网上银行登郑州百度seo关键词
  • 成都手机网站建设哪营销qq官网