При использовании временного пакета Go, в частности метода LoadLocation, он ищет информацию о часовых поясах в различных местах.Это объясняется в комментариях к LoadLocation в исходном коде по адресу https://golang.org/src/time/zoneinfo.go. В частности, это выглядит в следующих местах:
- Местоположение, указанное в переменной среды ZONEINFO
- Известноместа, где хранятся файлы базы данных часовых поясов в операционных системах Unix
- Файл zoneinfo.zip в вашем $ GOROOT
Когда вы программируете на компьютере с Windows, скорее всего, Goпо умолчанию 3-й вариант.Однако, когда вы работаете с двоичным файлом, $ GOROOT не существует, поэтому он не будет работать в вашем контейнере.В большинстве версий Linux второй вариант будет работать нормально, так как они будут иметь необходимые файлы базы данных часовых поясов.Однако у меня есть сильное подозрение, что оптимизированный контейнер, на который вы ссылаетесь, этого не делает.Это оставляет вам опцию 1, которая, по сути, состоит из помещения ваших собственных файлов базы данных часовых поясов в контейнер, а затем ссылки на их местоположение с помощью переменной среды ZONEINFO.Это одновременно боль в заднице, и я также обнаружил, что она молча завершается неудачей, когда вы запрашиваете файл часового пояса, который не существует.
В своем решении этой проблемы я в итоге создал пакет, который использует метод LoadLocationFromTZData и пытается упростить процесс предоставления и работы с вашей собственной копией базы данных часовых поясов.Вы можете увидеть мой собственный вопрос о переполнении стека здесь: Определить, не работает ли ZONEINFO в Go .И вы можете увидеть репозиторий для моего пакета с часовым поясом здесь: https://github.com/slotheroo/knozone