В Go вы можете указать конкретный файл zoneinfo.zip, который будет использоваться, добавив переменную среды ZONEINFO, которая указывает на конкретный файл, который вы хотите использовать для получения информации о часовом поясе. Это замечательно, так как позволяет мне гарантировать, что версии базы данных часовых поясов IANA, которые я использую на своем внешнем интерфейсе и на своем внутреннем сервере, совпадают.
Однако, похоже, нет никакого способа определить, не удалось ли использовать указанный файл информации о зоне. Глядя на исходный код (https://golang.org/src/time/zoneinfo.go),, похоже, что любые ошибки, связанные с использованием указанного файла, завершатся неудачно, а затем перейдет к проверке расположения ОС по умолчанию или местоположения $ GOROOT по умолчанию для извлечения информации о часовом поясе. это не то поведение, которое я бы предпочел, поскольку я хотел бы с уверенностью знать, что я использую указанную версию информации о зоне.
Я подумал о следующем с точки зрения решений, но я не доволен ни одним из них.
- Я могу проверить, что переменная окружения установлена самостоятельно, но в лучшем случае это частичное решение, поскольку оно не говорит мне, действительно ли файл используется LoadLocation.
- Я могу убедиться, что ни одно из резервных копий для информации о зоне не существует. Это кажется немного экстремальным и означает, что я должен быть крайне осторожен с окружением, в котором работает код, как в dev, так и в рабочих настройках.
Кто-нибудь знает более элегантный способ убедиться, что я использую файл zoneinfo.zip, указанный в моей переменной среды ZONEINFO?
Обновление: Для решения этой проблемы я также вдохновлен ответом @ chuckx ниже и собрал пакет Go , который позволяет определить, какая база данных часовых поясов используется. В файле readme содержатся инструкции о том, как получить правильную версию базы данных часовых поясов с помощью установки Go.