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、以字符串格式表示时间
不同计算机上的时间差别很多,使用字符串表示时间时,也有多种不同的方式,下面列出了列出了不同的时间标准及其字符串表示
| 类型 | 字符串 |
| ANSIC | Mon Jan 2 15:04:05 2006 |
| UnixDate | Mon Jan 2 15:04:05 MST 2006 |
| Ruby Date | Mon Jan 02 15:04:05 -0700 2006 |
| RFC822 | 02 Jan 06 15:04 MST |
| RFC822Z | 02 Jan 06 15:04 -0700 |
| RFC850 | Monday, 02-Jan-06 15:04 :05 MST |
| RFC1123 | Mon, 02 Jan 2006 15:04:05 MST |
| RFC1123Z | Mon, 02 Jan 2006 15:04 :05 -0700 |
| RFC3339 | 2006-01-02T 15:04:05Z07:00 |
| RFC3339Nano | 2006-01-02T 15:04:05.999999999Z07:00 |
通常,使用上述标准将日期存储在数据库中,并以字符串的方式提供它们,Go 语言支持时间标准, 也支持定义不符合这些标准的时间格式
下面例子将一个使用RFC3339 格式的时间宇符串传递给了结构体Time,再将这个结构体打印到终端,如图:

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

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




