【发布时间】:2018-12-05 18:59:05
【问题描述】:
在 Go 中,您可以通过添加指向您希望用于时区信息的特定文件的 ZONEINFO 环境变量来指定要使用的特定 zoneinfo.zip 文件。这很棒,因为它可以让我确保我在前端和后端使用的 IANA 时区数据库的版本是相同的。
但是,似乎没有任何方法可以检测指定区域信息文件的使用是否失败。查看源代码 (https://golang.org/src/time/zoneinfo.go),看起来使用指定文件的任何错误都会悄悄地失败,然后 go 将继续检查默认操作系统位置或默认 $GOROOT 位置以从那里提取时区信息。这不是我想要的行为,因为我想确定我正在使用我指定的区域信息版本。
我已经考虑了以下解决方案,但我对其中任何一个都不满意。
- 我可以检查自己是否设置了环境变量,但这充其量只是部分解决方案,因为它不会告诉我文件是否可以被 LoadLocation 实际使用。
- 我可以确保不存在区域信息的备份位置。这似乎有点极端,意味着我必须非常小心代码在开发和生产设置中运行的环境。
有谁知道一种更优雅的方式来确保我使用的是由我的 ZONEINFO 环境变量指定的 zoneinfo.zip 文件?
更新:为了解决这个问题,我也从下面@chuckx 的回答中获得灵感,并将a Go package 放在一起,从而消除了使用哪个时区数据库的猜测工作。自述文件中包含有关如何使用 Go 安装获取正确版本的时区数据库的说明。
【问题讨论】: