【GOLANG】Go语言学习-time包
go语言的time包组成
time包里有2个东西,一个是时间点,另一个是时长 Sleep函数 time.Sleep(time.Duration) fmt.Println("start sleeping...")
time.Sleep(time.Second)
fmt."end sleep.")
//【结果】打印start sleeping后,等了正好1秒后,打印了end sleep
//会阻塞,Sleep时,什么事情都不会做
After函数 time.After(time.Duration) "the 1") tc:=After(time.Second) //返回一个time.C这个管道,1秒(time.Second)后会在此管道中放入一个时间点(time.Now()) //时间点记录的是放入管道那一刻的时间值 fmt."the 2") fmt."the 3") <-tc //阻塞中,直到取出tc管道里的数据 fmt."the 4") //【结果】立即打印123,等了1秒不到一点点的时间,打印了4,结束 //打印the 1后,获得了一个空管道,这个管道1秒后会有数据进来 //打印the 2,(这里可以做更多事情) //打印the 3 //等待,直到可以取出管道的数据(取出数据的时间与获得tc管道的时间正好差1秒钟) //打印the 4
//返回一个time.C这个管道,1秒(time.Second)后会在此管道中放入
//一个时间点(time.Now()),时间点记录的是放入管道那一刻的时间值
fmt."the 3")
(time.Second*0.5)//这里是假设这个Println动作执行了半秒钟
fmt."the 4")
"the 5")
fmt."the 6")
fmt."the 7")
<-tc "the 8")
//【结果】立即打印1和2,花了半秒打印了3和4,然后又立即打印了5678,结束
//这里的<-tc是立即能获得数据的
//因为早在执行差不多Print 6的时候,管道内已经有数据了
//当gorotine线把数据丢到管道中后,它自己阻塞了(具体请了解goroutine)
AfterFunc函数 time.AfterFunc(time.Duration,func()) 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里执行的 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) fmt.Println("the 1")
tc:=time.Tick(time.Second) //返回一个time.C这个管道,1秒(time.Second)后会在此管道中放入一个时间点,
//1秒后再放一个,一直反复,时间点记录的是放入管道那一刻的时间
for i:=1;i<=2;i++{
<-tc
fmt."hello")
}
//每隔1秒,打印一个hello
time.Time的方法(time.Time自己独有的函数) Before & After方法 判断一个时间点是否在另一个时间点的前面(后面),返回true或false t1:=Now()
(time.Second)
t2:=a:=t2.(t1) //t2的记录时间是否在t1记录时间的**后面**呢,是的话,a就是true
fmt.(a) //true
b:=t2.Before//t2的记录时间是否在t1记录时间的**前面**呢,是的话,b就是true
fmt.(b) //false
Sub方法
两个时间点相减,获得时间差(Duration) ()d:=t2.Sub//时间2减去时间1 fmt.(d) //打印结果差不多为1.000123几秒,因为Sleep无法做到精确的睡1秒 后发生的时间 减去 先发生时间,是正数 Add方法 拿一个时间点,add一个时长,获得另一个时间点 ()//现在是12点整(假设),那t1记录的就是12点整 t2:=t1.Add(time.Hour) //那t1的时间点 **加上(Add)** 1个小时,是几点呢?fmt.(t2) //13点(呵呵) http://my.oschina.net/u/943306/blog/149395 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |