当前位置: 首页 > 面试题库 >

检测ZONEINFO在Go中是否失败

松波
2023-03-14
问题内容

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

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

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

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

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

更新:
为了解决这个问题,我也从下面的@chuckx答案中得到启发,并组合了一个Go程序包,该程序包可以从正在使用的时区数据库中得出猜测结果。自述文件中包含有关如何使用Go安装获取正确版本的时区数据库的说明。


问题答案:

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

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

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

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

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


 类似资料:
  • 问题内容: Go的标准库没有专门用于检查文件是否存在的函数(如Python的)。什么是 惯用的 方式做到这一点? 问题答案: 要检查文件是否不存在,等同于Python的文件: 要检查文件是否存在,等效于Python的文件: 编辑:根据最近的评论

  • Go的标准库没有专门用于检查文件是否存在的功能(如Python的)。

  • 我希望能够检测编辑文本何时没有被点击,这样我就可以用文本视图替换它。我试过了 但是祝酒词不会被调用。

  • 问题内容: 如何判断bash脚本中是否有错误? 如果有错误,我想简单地说; 问题答案: 以下是一些常见的形式。最佳选择取决于您的工作。您可以在单个脚本中使用任何子集或它们的组合,而不会造成不良影响。

  • 问题内容: 如果测试失败,我想截图。与其将所有测试方法都包裹在try / catch块中,不如将这种逻辑添加到以标记的方法中。 如何在当前测试失败的注解方法中进行检测? 问题答案: 如果带有注释的方法具有参数,则TestNG将自动注入测试结果。(来源:TestNG文档,第5.18.1节) 这应该做的工作:

  • 本文向大家介绍如何检测MySQL中是否存在表?,包括了如何检测MySQL中是否存在表?的使用技巧和注意事项,需要的朋友参考一下 要检测表的存在,请使用INFORMATION_SCHEMA.TABLES的概念。以下是语法- 要了解上述语法,让我们创建一个表- 这是检测数据库中是否存在表的查询- 这将产生以下输出-