首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检测ZONEINFO是否在Go中失败

检测ZONEINFO是否在Go中失败
EN

Stack Overflow用户
提问于 2018-06-27 01:27:10
回答 1查看 1.5K关注 0票数 3

在Go中,可以通过添加指向要用于时区信息的特定文件的ZONEINFO环境变量来指定要使用的特定zoneinfo.zip文件。这是很棒的,因为它允许我确保我在前端和后端使用的IANA时区数据库的版本是相同的。

但是,似乎没有任何方法来检测指定区域信息文件的使用是否失败。查看源代码(https://golang.org/src/time/zoneinfo.go),看起来使用指定文件的任何错误都会悄然失败,然后继续检查默认OS位置或默认$GOROOT位置以从其中提取时区信息。这不是我喜欢的行为,因为我想确切地知道我正在使用我指定版本的区域信息。

我从解决方案的角度考虑了以下几点,但我对其中任何一个都不满意。

  1. 我可以检查环境变量是否是自己设置的,但这充其量只是一个部分解决方案,因为它不能告诉我该文件是否可以由LoadLocation实际使用。
  2. 我可以确保区域信息的备份位置都不存在。这似乎有点极端,意味着我必须非常小心代码在开发和生产设置中运行的环境。

有没有人知道一种更优雅的方法来确保我使用的是ZONEINFO环境变量指定的zoneinfo.zip文件?

Update:,为了解决这个问题,我也从@chuckx下面的答案中得到了灵感,并将使用时区数据库的猜测工作的围棋包组合在一起。自述文件中包括关于如何使用Go安装获取时区数据库的正确版本的说明。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-27 05:05:38

也许考虑不依赖于环境变量?

如果您不反对分发解压缩的文件集,那么可以很容易地使用LoadLocationFromTZData(name string, data []byte)。第二个参数是单个时区文件的内容。

作为参考,处理zip文件的功能可以在未导出的函数loadTzinfoFromZip()中找到。

一步一步地从@Slotherooo的评论中提取出来:

  1. 制作本地版本的time.loadTzinfoFromZip(zipfile, name string) ([]byte, error)
  2. 使用该方法从[]byte文件中提取所需位置的timeinfo.zip
  3. 使用time.LoadLocationFromTZData()独占而不是time.LoadLocation
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51053321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档