go语言的time包

组成

  • time.Duration(时长,耗时)
  • time.Time(时间点)
  • time.C(放时间点的管道)[ Time.C:=make(chan time.Time) ]

time包里有2个东西,一个是时间点,另一个是时长 
时间点的意思就是“某一刻”,比如 2000年1月1日1点1分1秒 那一刻(后台记录的是unix时间,从1970年开始计算) 
时长就是某一刻与另一刻的差,也就是耗时

函数

Sleep函数

time.Sleep(time.Duration) 
表示睡多少时间,睡觉时,是阻塞状态

fmt.Println("start sleeping...")
time.Sleep(time.Second)
fmt.Println("end sleep.")
//【结果】打印start sleeping后,等了正好1秒后,打印了end sleep
//会阻塞,Sleep时,什么事情都不会做

After函数

time.After(time.Duration) 
和Sleep差不多,意思是多少时间之后,但在取出管道内容前不阻塞

fmt.Println("the 1")
tc:=time.After(time.Second) //返回一个time.C这个管道,1秒(time.Second)后会在此管道中放入一个时间点(time.Now())//时间点记录的是放入管道那一刻的时间值
fmt.Println("the 2")
fmt.Println("the 3")
<-tc   //阻塞中,直到取出tc管道里的数据
fmt.Println("the 4")
//【结果】立即打印123,等了1秒不到一点点的时间,打印了4,结束
//打印the 1后,获得了一个空管道,这个管道1秒后会有数据进来
//打印the 2,(这里可以做更多事情)
//打印the 3
//等待,直到可以取出管道的数据(取出数据的时间与获得tc管道的时间正好差1秒钟)
//打印the 4

fmt.Println("the 1")
tc:=time.After(time.Second) //返回一个time.C这个管道,1秒(time.Second)后会在此管道中放入//一个时间点(time.Now()),时间点记录的是放入管道那一刻的时间值
fmt.Println("the 2")
fmt.Println("the 3")
time.Sleep(time.Second*0.5)//这里是假设这个Println动作执行了半秒钟
fmt.Println("the 4")
time.Sleep(time.Second*0.5)//这里是假设这个Println动作执行了半秒钟
fmt.Println("the 5")
fmt.Println("the 6")
fmt.Println("the 7")
<-tc   //阻塞中,直到取出tc管道里的数据
fmt.Println("the 8")
//【结果】立即打印1和2,花了半秒打印了3和4,然后又立即打印了5678,结束
//这里的<-tc是立即能获得数据的
//因为早在执行差不多Print 6的时候,管道内已经有数据了
//当gorotine线把数据丢到管道中后,它自己阻塞了(具体请了解goroutine)

AfterFunc函数

time.AfterFunc(time.Duration,func()) 
和After差不多,意思是多少时间之后在goroutine line执行函数

f := func() {fmt.Println("Time out")
}
time.AfterFunc(1*time.Second, f)
time.Sleep(2 * time.Second) //要保证主线比子线“死的晚”,否则主线死了,子线也等于死了
//【结果】运行了1秒后,打印出timeout,又过了1秒,程序退出
//将一个间隔和一个函数给AfterFunc后
//间隔时间过后,执行传入的函数

由于f函数不是在Main Line执行的,而是注册在goroutine Line里执行的 
所以一旦后悔的话,需要使用Stop命令来停止即将开始的执行,如果已经开始执行就来不及了

houhui := true
f := func() {fmt.Println("Time out")
}
ta := time.AfterFunc(2*time.Second, f)
time.Sleep(time.Second)
if houhui {ta.Stop()
}
time.Sleep(3 * time.Second)    //要保证主线比子线“死的晚”,否则主线死了,子线也等于死了
//【结果】运行了3秒多一点点后,程序退出,什么都不打印
//注册了个f函数,打算2秒后执行
//过了1秒后,后悔了,停掉(Stop)它

Tick函数

time.Tick(time.Duration) 
和After差不多,意思是每隔多少时间后,其他与After一致

fmt.Println("the 1")
tc:=time.Tick(time.Second) //返回一个time.C这个管道,1秒(time.Second)后会在此管道中放入一个时间点,//1秒后再放一个,一直反复,时间点记录的是放入管道那一刻的时间
for i:=1;i<=2;i++{<-tcfmt.Println("hello")
}
//每隔1秒,打印一个hello

time.Time的方法(time.Time自己独有的函数)

Before & After方法

判断一个时间点是否在另一个时间点的前面(后面),返回true或false

t1:=time.Now()
time.Sleep(time.Second)
t2:=time.Now()
a:=t2.After(t1)     //t2的记录时间是否在t1记录时间的**后面**呢,是的话,a就是true
fmt.Println(a)       //true
b:=t2.Before(t1)     //t2的记录时间是否在t1记录时间的**前面**呢,是的话,b就是true
fmt.Println(b)       //false

Sub方法

两个时间点相减,获得时间差(Duration)

t1:=time.Now()
time.Sleep(time.Second)
t2:=time.Now()
d:=t2.Sub(t1)     //时间2减去时间1
fmt.Println(d)       //打印结果差不多为1.000123几秒,因为Sleep无法做到精确的睡1秒
后发生的时间  减去   先发生时间,是正数

Add方法

拿一个时间点,add一个时长,获得另一个时间点

t1:=time.Now()              //现在是12点整(假设),那t1记录的就是12点整
t2:=t1.Add(time.Hour)          //那t1的时间点 **加上(Add)** 1个小时,是几点呢?
fmt.Println(t2)       //13点(呵呵)


http://my.oschina.net/u/943306/blog/149395

【golang】Go语言学习-time包相关推荐

  1. go语言复数包_go语言学习之包和变量详解

    前言 本文主要介绍了关于go语言之包和变量的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 一.包的概念 包是go语言中不可缺少部分,在每个go源码的第一行进行定义,定义方 ...

  2. [Golang]Go语言学习资源集合

    说明 对于新手来讲,入门一门新的语言无疑是有困难的,往往会因为找不到方向而迷失.在我的学习golang的过程中,也碰到了该如何入手的问题,还好我善于搜索,有一些基础,入手的时候没有碰到太多困难.但是如 ...

  3. Go语言学习 fmt包-是什么意思

    fmt 包的含义是什么? 开始学习go语言,就是fmt的包,这个包为啥叫fmt包呢?可以参考 go语言的文档. 参考:fmt/doc.go (下面代码所示) go语言的fmt package ,实现了 ...

  4. Go语言学习笔记—golang标准库log包

    文章目录 一 log简介 二 log简单使用 2.1 log.Print/Println/Printf函数 2.2 log.Panic/Panicf/Panicln函数 2.3 log.Fatal/F ...

  5. golang go语言_在7小时内学习快速简单的Go编程语言(Golang)

    golang go语言 The Go programming language (also called Golang) was developed by Google to improve prog ...

  6. Go 语言学习总结(4)—— 为什么说 Golang 是面向未来的语言?

    前言 Golang 是最年轻的编程语言之一,于 2007 年设计,由 Ken Thompson(UNIX 和 C 的设计者和创建者).Rob Pike(UTF 8 和 UNIX 格式的共同创建者)和 ...

  7. R语言︱H2o深度学习的一些R语言实践——H2o包

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- R语言H2o包的几个应用案例 笔者寄语:受启发 ...

  8. R语言使用mgcv包中的gam函数拟合广义加性模型(Generalized Additive Model,GAMs):从广义加性模型GAM中抽取学习到的样条函数(spline function)

    R语言使用mgcv包中的gam函数拟合广义加性模型(Generalized Additive Model,GAMs):从广义加性模型GAM中抽取学习到的样条函数(spline function) 目录

  9. golang go语言_为什么Go是作为PHP开发人员学习的功能强大的语言

    golang go语言 I've been programming using PHP professionally since 10 years now. After my Computer Eng ...

最新文章

  1. BlogEngine.Net架构与源代码分析系列(转载)
  2. Linux系统篇-文件系统虚拟文件系统
  3. Netstat命令(windows下)
  4. java线程概念_《Java基础知识》Java线程的概念
  5. zoom 用户被锁定_重新考虑Zoom的用户体验
  6. Array 的一些常用 API
  7. 数列分块入门 7(LibreOj-6283)
  8. tortoiseGit 解决冲突
  9. ppc手机用蓝牙和电脑同步上网设置教程
  10. 奇虎360 2017校招笔试题
  11. UGI九宫格sliced显示问题
  12. mysql bug frash_MySQL Flush导致的等待问题
  13. 计算机网络大学规划500字,大学学习计划书范文500字
  14. 最新服务器CPUe5,不能说的秘密 至强E5处理器背后的真相
  15. DC 视频教程 第八期
  16. GB28181国标协议通讯流程简析以及NVR注册不上等相关问题点记录
  17. Android中文API:AbsListView
  18. Django2.2框架小白项目心得(一)
  19. 她,快手上市中最隐秘的富豪:一笔赚回百亿美元
  20. C# 调用 Matlab 函数

热门文章

  1. cvs提交错误:'Committing resources' has encountered a problem 解决办法-------程序员没有解决不了的错误
  2. LightOJ - Travel Company(Spfa)
  3. python 写天干地支
  4. Ubuntu下的杀毒
  5. Java小农养成记第九天
  6. html设置字体比12还小,css字体更小 css比12px更小的方法
  7. 07年博士考题整理合集!
  8. photoshopRGB颜色模式-调色教程
  9. 软件工程:黄金G点小游戏1.0
  10. 模拟幅度调制相干解调系统抗噪声性能仿真分析-python实现