zoukankan      html  css  js  c++  java
  • 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)
    }
    }

  • 相关阅读:
    HDU2024 C语言合法标识符
    HDU2044 一只小蜜蜂…(简单递推)
    HDU2023 求平均成绩
    CodeForces 1185C1 Exam in BerSU (easy version) (贪心,排序)
    题目梳理(一)(2019.07.06~2019.07.20)
    Codeforces Gym 100989F(STL: map)
    UVA 10815 Andy's First Dictionary(STL: set)
    HDU2020 绝对值排序
    周二——4.2
    周一——4.1
  • 原文地址:https://www.cnblogs.com/zhangboyu/p/7449487.html
Copyright © 2011-2022 走看看