go time包

分析time包里面的函数用法及功能

前言

  • 本文章只是针对自己在工作学习中遇到的实际问题,然后探究相关知识点得出的结论,仅供参考。

time.format()

  • 功能: 格式化时间的输出
  • 测试代码:
    fmt.Println(time.Now().Format("2006-01-02-15-04"))
    
    output:
      2017-07-26-20-11
  • 结论: 要得到格式化的输出时间,就必须传入一个参考时间,官方给出的是:Mon Jan 2 15:04:05 -0700 MST 2006该问题是由于我在探究go seelog包时,延伸学习到的知识,seelog包中xml配置文件会涉及到该format知识,seelog相关知识可以参考我的seelog文章

  • go sdk中给出的英文解释 :

// according to layout, which defines the format by showing how the reference
// time, defined to be
//  Mon Jan 2 15:04:05 -0700 MST 2006

time.After(d Duration)

  • 函数定义: func After(d Duration) <-chan Time,返回只读的channel,
  • 功能: 延时d时间之后,将当前时间作为数据放在只读的channel返回值返回
  • 应用场景: 定时作用
  • 错误的用法:
func h_time() {
    c := make(chan int, 1)
    defer close(c)
    h_flag := false
    for i := 1; i < 100000000; i++ {
        c <- i
        select {
        case m := <-c:
            fmt.Println(m)
        case tt := <-time.After(time.Second):
            fmt.Println("time out: ", tt)
            h_flag = true
        }
        if h_flag == true {
            break
        }
    }
}

上述例子程序会把整个for循环执行完才会终止,因为在select中的case2会每次都新建一个timer,然后1秒之后返回,
因为每次都是新建timer对象,因此程序在case2根本就读不到数据,最终执行完for循环结束。

  • 正确的用法:
func h_time() {
    c := make(chan int, 1)
    defer close(c)
    time_chan := time.After(time.Second)
    h_flag := false
    for i := 1; i < 100000000; i++ {
        c <- i
        select {
        case m := <-c:
            fmt.Println(m)
        case tt := <- time_chan:
            fmt.Println("time out: ", tt)
            h_flag = true
        }
        if h_flag == true {
            break
        }
    }
}

time.Tick(d Duration)

  • 函数定义: func Tick(d Duration) <-chan Time
  • 功能: 每隔d时间间隔就在只读channel返回值中返回当前时间,原理和`time.after()类似
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 01.{ 换行: Opening Brace Can't Be Placed on a Separate Lin...
    码农不器阅读 7,005评论 0 14
  • fmt格式化字符串 格式:%[旗标][宽度][.精度][arg索引]动词旗标有以下几种:+: 对于数值类型总是输出...
    皮皮v阅读 4,786评论 0 3
  • Notes Section 2, Program Structure nested block in if-els...
    keysaim阅读 4,949评论 0 1
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,473评论 19 139
  • 一直想写点关于他的东西。只不过我比较懒,不论对事,还是人。于是就迟了。 遇到他是今年四月的事,大西北黄沙满天乱飞。...
    他啊阅读 1,599评论 0 1