Go语言时间编程

1、时间元素编程:

Go 语言标准库提供了time 包,其中包含用于同当前时间交互以及测量时间的函数和方法。

使用Go 语言打印计算机中的当前时间, 可使用函数Now,如图:

上图中的时间结果来自于底层的操作系统时间,如果操作系统时间变化,获取到的时间也会对应变化

2、让程序休眠:

在计算机程序中,休眠意味着暂停执行程序,在休眠期间,程序什么都不做,但在Go 语言中,如果Goroutine 处于休眠状态,则程序的其他部分可继续执行

下面例子表示程序休眠3s后,在打印系统的时间,如图:

为让程序暂停执行一会儿,休眠是很有用的,可通过休眠来等待其他任务完成或让程序暂停执行,但除非只是想让程序暂停一会儿,否则使用Goroutine 来管理执行流程是更佳的选择

3、设置超时时间:

在select 语句中指定超时时间是使用time包在过去特定的时间后向通道发送一条消息实现的,要在特定的时间过后执行某项操作,可使用函数After,此函数返回一个通道,在指定时间后(time.Second),通过通道返回当前时间

下面例子表示执行for无限循环,如果超时3s则执行对应语句,如图:

下面设置并发程序超时时间,如图:

  • 22-23行:设置ctc过期时间为7s
  • 24行:并发执行函数,通过ctx跟踪goroutine,因为设置过期时间为7s,因此go test至少要执行7s才会过期,过期后才会触发cancel(),因此此时select中的ctx.Done()不会被执行,但是time.After中设置耗时为3s,也就是select中连续3s没有匹配的case,那么表示超时,就执行下面的超时语句
  • time.Second的返回类型为time.Duration,如果有以这个为参数的,可直接赋值

执行结果可以看出,超时时间为3s,如图:

4、使用ticker

使用ticker 可让代码每隔特定的时间就重复执行一次,需要在很长的时间内定期执行任务时,这么做很有用

下面例子使用ticker来每隔3s重新显示时间,如图:

5、以字符串格式表示时间

不同计算机上的时间差别很多,使用字符串表示时间时,也有多种不同的方式,下面列出了列出了不同的时间标准及其字符串表示

类型字符串
ANSICMon Jan 2 15:04:05 2006
UnixDateMon Jan 2 15:04:05 MST 2006
Ruby DateMon Jan 02 15:04:05 -0700 2006
RFC82202 Jan 06 15:04 MST
RFC822Z02 Jan 06 15:04 -0700
RFC850Monday, 02-Jan-06 15:04 :05 MST
RFC1123Mon, 02 Jan 2006 15:04:05 MST
RFC1123ZMon, 02 Jan 2006 15:04 :05 -0700
RFC33392006-01-02T 15:04:05Z07:00
RFC3339Nano2006-01-02T 15:04:05.999999999Z07:00

通常,使用上述标准将日期存储在数据库中,并以字符串的方式提供它们,Go 语言支持时间标准, 也支持定义不符合这些标准的时间格式

下面例子将一个使用RFC3339 格式的时间宇符串传递给了结构体Time,再将这个结构体打印到终端,如图:

运行后,将发现成功地分析了这个表示时间的字符串,如图:

6、使用结构体Time

将表示时间的字符串分析为结构体Time 后,就可使用很多方法来使用它,如图:

标签