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)
    }
    }

  • 相关阅读:
    ORM 实现数据库表的增删改查
    数据库表设计(一对多,多对多)
    Razor模板引擎
    文件的上传(表单上传和ajax文件异步上传)
    生成验证码封装(新版)
    MD5加密
    反射的一些基本用法
    数据的增删改查(三层)<!--待补充-->
    linux文件的硬连接和软连接
    linux磁盘用满的两种情况
  • 原文地址:https://www.cnblogs.com/zhangboyu/p/7449487.html
Copyright © 2011-2022 走看看