标签「go」下的文章
go printf格式化参数
go-正则
go 工具介绍
go-time包
[TOC]
Go 的时间操作基本上都用 time 包。
*time.Location 类型
在 Go 中,表示时区的类型是 type Location struct{...}
,代码中使用 *time.Location
对象。
对于不严格的场景而言,可以获取服务器所处的时区。但是本文不建议这个方法。因为一台服务器服务的时区是事先可知的,或者说是需要对接的时区信息也是已知的(比如对接微信,那么时间肯定是东八区,而不是 UTC 时间)。获得东八区时区的代码如下:
loc, _ := time.LoadLocation("Asia/Shanghai")
之后这个 loc 可以作为常量使用。是否能够拿到时区,取决于机器本地的 zoneinfo 文件。后文也将使用这个 loc
作为全局变量。在docker环境下,没有zoneinfo文件,所以需要自定义一个时区名称,比如我们人工添加一个巴西利亚时间:
brazil := time.FixedZone("Brazil/Brasilia", -3*60*60)
这里我们同时要知道一个很重要的概念,就是在 *Location
的加持下,一个 Time
类型本身是同时记录着 UTC 时间和本地时间的,这就使得一个 Go 时间类型不会因为时区而出现歧义,比如你可以用一个东八区的 Time
和西八区的 Time
随意进行运算也不会出错。这一特性使得时间类型变得极为实用。
go信号处理示例
[TOC]
golang信号signal的处理
在实际项目中我们修改了配置文件后,希望在不重启进程的情况下重新加载配置文件,这时候就需要通过信号传递来进行处理了。golang中对信号的处理主要使用os/signal包中的两个方法:
一个是notify方法用来监听收到的信号;
一个是 stop方法用来取消监听。下面给一个些示例。