文档章节

Go语言学习-time包

tree2013
 tree2013
发布于 2016/10/08 17:34
字数 1286
阅读 37
收藏 1
点赞 0
评论 0

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时,什么事情都不会做

time.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

time.After1

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)

上面的说法是错的,实际上会抱一个错误,0.5秒不能这样表示,然后打印是先打印1,2,3,过了半秒打印4,再过半秒答应5,6,7,8

time.After2

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后 //间隔时间过后,执行传入的函数

time.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++{
    <-tc
    fmt.Println("hello")
}
//每隔1秒,打印一个hello

time.Tick

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点(呵呵)

本文转载自:

共有 人打赏支持
tree2013
粉丝 27
博文 182
码字总数 62280
作品 0
武汉
后端工程师
Go语言学习笔记 package

加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 strings strings包实现了用于操作字符的简单函数。 strings.Index("suoning", "n") //3(子串第一次出现的位置,不存在则返回...

xumaojun ⋅ 03/12 ⋅ 0

Play中的引用其他项目包

Play 1.2.3 中主要包括的第三方包有 xstream xml与obejct互转 snakeyaml yaml解析与发射 slf4j 日志接口相关 signpost Oauth相关,第三方帐号协议 postgresql postgresql数据库驱动 oval Obj...

刀狂剑痴 ⋅ 2015/08/27 ⋅ 0

R语言深度学习包有哪些????

R语言深度学习的包有哪些???求大神告知R语言深度学习的包有哪些?R语言深度学习的包有哪些???求大神告知R语言深度学习的包有哪些?R语言深度学习的包有哪些???求大神告知R语言深度学...

pb加油 ⋅ 2016/08/31 ⋅ 0

Go笔记2.2 这儿有包了解一下

1 前言 先生,Go语言里有个包,进来了解一下吧。 包是结构化代码的一种方式:每个程序都由包(通常简称为 pkg)的概念组成,可以使用自身的包或者从其它包中导入内容。 如同其它一些编程语言...

iotisan ⋅ 03/23 ⋅ 0

python基础学习第六天

6.1 模块说明 6.2 模块 time datetime random os shutil json pickle shelve xml hashlib hmac 模块定义: 模块:从逻辑上来组织python代码(定义变量,函数,类,逻辑,其就是为了实现一个功...

812374156 ⋅ 2017/11/05 ⋅ 0

C++雾中风景9:emplace_back与可变长模板

C++11的版本在vector容器添加了emplaceback方法,相对于原先的pushback方法能够在一定程度上提升vector容器的表现性能。所以我们从STL源码角度来切入,看看这两种方法有什么样的区别,新引进...

LeeHappen ⋅ 05/21 ⋅ 0

R语言知识体系概览

R语言知识体系概览 R的极客理想系列文章,涵盖了R的思想,使用,工具,创新等的一系列要点,以我个人的学习和体验去诠释R的强大。 R语言作为统计学一门语言,一直在小众领域闪耀着光芒。直到...

openthings ⋅ 2015/12/19 ⋅ 0

R语言入门 – 什么是R语言,为什么选择R语言用于机器学习或数据挖掘

  R语言最近在TIOBE排名上取得了不小的进步,上升到了第13名。因为机器学习的火爆的程度和R语言特殊的语法,使得它的关注度越来越高。好多人对于R语言的特性和语法不太了解,而因我在上学的...

全栈开发 ⋅ 03/06 ⋅ 0

JFreeChart学习示例

JFreeChart 是Java平台上一个开放的图表绘制类库,它完全使用Java语言编写,是为applications, applets, servlets 以及JSP等使用所设计。 JFreeChart可以生成饼图(pie)、柱状图(bar)、散...

长平狐 ⋅ 2013/01/06 ⋅ 0

整理的机器学习资源大全

本文汇编了一些机器学习领域的框架、库以及软件(按编程语言排序)。 伯乐在线已在 GitHub 上发起「机器学习资源大全中文版」的整理。欢迎扩散、欢迎加入。 https://github.com/jobbole/awe...

李雷岗 ⋅ 2016/11/24 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

从零开始搭建Risc-v Rocket环境---(1)

为了搭建Rocke环境,我买了一个2T的移动硬盘,安装的ubuntu-16.04 LTS版。没有java8,gcc是5.4.0 joe@joe-Inspiron-7460:~$ java -version程序 'java' 已包含在下列软件包中: * default-...

whoisliang ⋅ 29分钟前 ⋅ 0

大数据学习路线(自己制定的,从零开始学习大数据)

大数据已经火了很久了,一直想了解它学习它结果没时间,过年后终于有时间了,了解了一些资料,结合我自己的情况,初步整理了一个学习路线,有问题的希望大神指点。 学习路线 Linux(shell,高并...

董黎明 ⋅ 35分钟前 ⋅ 0

systemd编写服务

一、开机启动 对于那些支持 Systemd 的软件,安装的时候,会自动在/usr/lib/systemd/system目录添加一个配置文件。 如果你想让该软件开机启动,就执行下面的命令(以httpd.service为例)。 ...

勇敢的飞石 ⋅ 37分钟前 ⋅ 0

mysql 基本sql

CREATE TABLE `BBB_build_info` ( `community_id` varchar(50) NOT NULL COMMENT '小区ID', `layer` int(11) NOT NULL COMMENT '地址层数', `id` int(11) NOT NULL COMMENT '地址id', `full_......

zaolonglei ⋅ 46分钟前 ⋅ 0

安装chrome的vue插件

参看文档:https://www.cnblogs.com/yulingjia/p/7904138.html

xiaoge2016 ⋅ 49分钟前 ⋅ 0

用SQL命令查看Mysql数据库大小

要想知道每个数据库的大小的话,步骤如下: 1、进入information_schema 数据库(存放了其他的数据库的信息) use information_schema; 2、查询所有数据的大小: select concat(round(sum(da...

源哥L ⋅ 今天 ⋅ 0

两个小实验简单介绍@Scope("prototype")

实验一 首先有如下代码(其中@RestController的作用相当于@Controller+@Responsebody,可忽略) @RestController//@Scope("prototype")public class TestController { @RequestMap...

kalnkaya ⋅ 今天 ⋅ 0

php-fpm的pool&php-fpm慢执行日志&open_basedir&php-fpm进程管理

12.21 php-fpm的pool pool是PHP-fpm的资源池,如果多个站点共用一个pool,则可能造成资源池中的资源耗尽,最终访问网站时出现502。 为了解决上述问题,我们可以配置多个pool,不同的站点使用...

影夜Linux ⋅ 今天 ⋅ 0

微服务 WildFly Swarm 管理

Expose Application Metrics and Information 要公开关于我们的微服务的有用信息,我们需要做的就是将监视器模块添加到我们的pom.xml中: 这将使在管理和监视功能得到实现。从监控角度来看,...

woshixin ⋅ 今天 ⋅ 0

java连接 mongo伪集群部署遇到的坑

部署mongo伪集群 #创建mongo数据存放文件地址mkdir -p /usr/local/config1/datamkdir -p /usr/local/config2/data mkdir -p /usr/local/config3/data mkdir -p /usr/local/config1/l......

努力爬坑人 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部