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

  • 相关阅读:
    pch”预编译头文件来自编译器的其他版本,或者预编译头为 C++ 而在 C 中使用它(或相反) and vs找不到路径
    VC++获得当前系统时间的几种方案
    无法解析的外部符号 __imp____glutInitWithExit@12,该符号在函数 _glutInit_ATEXIT_HACK@8 中被引用
    error C2381: “exit” : 重定义
    vs2019 link glaux.lib 无法解析的外部符号,是缺少一个Lib
    操作系统算法整理+汇总
    vs2019配置glm包
    第二题 既约分数
    死磕Spring之IoC篇
    精尽Spring Boot源码分析
  • 原文地址:https://www.cnblogs.com/zhangboyu/p/7449487.html
Copyright © 2011-2022 走看看