• timeCache.go


    package blog4go

    import (
    "sync"
    "time"
    )

    const (
    // PrefixTimeFormat  时间格式前缀
    PrefixTimeFormat = "[2006/01/02:15:04:05]"

    // DateFormat 时间格式
    DateFormat = "2006-01-02"
    )

    // timeFormatCacheType是一个时间格式的缓存
    type timeFormatCacheType struct {
    //当前时间
    now time.Time
    //当前时间格式
    date string
    //当前格式化的时间
    format []byte
    //昨天
    dateYesterday string
    //读写锁
    lock *sync.RWMutex
    }

    //全局时间的缓存  对于写日志
    var timeCache = timeFormatCacheType{}

    func init() {
    timeCache.lock = new(sync.RWMutex)  //初始化锁
    timeCache.now = time.Now() //当前时间
    timeCache.date = timeCache.now.Format(DateFormat)  //当前时间的格式化
    timeCache.format = []byte(timeCache.now.Format(PrefixTimeFormat)) //当前时间格式化转为字节数组
    timeCache.dateYesterday = timeCache.now.Add(-24 * time.Hour).Format(DateFormat) // 获取当前时间的昨天

    //每秒跟新一下timeCache 中的时间  当独开启一个协成
    go func() {
    // tick 创建一个跟新时间周期
    t := time.Tick(1 * time.Second)

    //UpdateTimeCache  Loop:
    for {
    select {
    case <-t:
    timeCache.fresh()
    }
    }
    }()
    }

    //获取当前时间
    func (timeCache *timeFormatCacheType) Now() time.Time {
    timeCache.lock.RLock()
    defer timeCache.lock.RUnlock()
    return timeCache.now
    }

    //获取当前时间
    func (timeCache *timeFormatCacheType) Date() string {
    timeCache.lock.RLock()
    defer timeCache.lock.RUnlock()
    return timeCache.date
    }

    //获取昨天时间
    func (timeCache *timeFormatCacheType) DateYesterday() string {
    timeCache.lock.RLock()
    defer timeCache.lock.RUnlock()
    return timeCache.dateYesterday
    }

    //当前时间格式化函数
    func (timeCache *timeFormatCacheType) Format() []byte {
    timeCache.lock.RLock()
    defer timeCache.lock.RUnlock()
    return timeCache.format
    }

    // 刷新 timeCache的时间
    func (timeCache *timeFormatCacheType) fresh() {
    timeCache.lock.Lock()
    defer timeCache.lock.Unlock()

    // get current time and update timeCache
           //获取当期时间  并且更新timeCache  缓存时间
    now := time.Now()
    timeCache.now = now
    timeCache.format = []byte(now.Format(PrefixTimeFormat))
    date := now.Format(DateFormat)
    if date != timeCache.date {
    timeCache.dateYesterday = timeCache.date
    timeCache.date = now.Format(DateFormat)
    }
    }

  • 相关阅读:
    SQLServer控制用户访问权限表
    jQuery 增加 删除 修改select option .
    C# Socket编程笔记
    前端笔记知识点整合之JavaScript(二)关于运算符&初识条件判断语句
    推荐一款中国风React组件
    Linux命令
    不要总想着二进制
    React 中阻止事件冒泡的问题
    [技术] 如何正确食用cnblogs的CSS定制
    新手如何理解JS面向对象开发?
  • 原文地址:https://www.cnblogs.com/zhangboyu/p/7449487.html
Copyright © 2020-2023  润新知