gpt4 book ai didi

go - 检测 Go 中 ZONEINFO 是否失败

转载 作者:IT王子 更新时间:2023-10-29 01:08:30 26 4
gpt4 key购买 nike

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

但是,似乎没有任何方法可以检测指定区域信息文件的使用是否失败。查看源代码(https://golang.org/src/time/zoneinfo.go),似乎使用指定文件的任何错误都会悄悄失败,然后 go 将继续检查默认操作系统位置或默认 $GOROOT 位置以从那里提取时区信息。这不是我想要的行为,因为我想确定我正在使用我指定版本的区域信息。

我考虑过以下解决方案,但我对其中任何一个都不满意。

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

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

更新:为了解决这个问题,我也从下面@chuckx 的回答中获得灵感并将其放在一起 a Go package这消除了使用哪个时区数据库的猜测。自述文件中包含有关如何使用 Go 安装获取正确版本的时区数据库的说明。

最佳答案

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

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

作为引用,处理 zip 文件的功能在未导出的函数中找到 loadTzinfoFromZip() .

从@Slotherooo 的评论中提取的分步方法:

  1. 制作一个本地版本的time.loadTzinfoFromZip(zipfile, name string) ([]byte, error)
  2. 使用该方法从timeinfo.zip 文件中提取所需位置的[]byte
  3. 使用time.LoadLocationFromTZData()专门代替 time.LoadLocation

关于go - 检测 Go 中 ZONEINFO 是否失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51053321/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com