这个简单的代码:
tzloc, err := time.LoadLocation(service.Settings.TimezoneName)
if err != nil {
panic(err)
}
Run Code Online (Sandbox Code Playgroud)
在 Go 1.12 中工作正常,但在 1.13 中,它因“未知时区澳大利亚/墨尔本”而失败。我确信它在某些环境中有效,但无论出于何种原因,它在 1.13 中都被我们破坏了。它通过恢复到 1.12 立即修复。我想知道是否有人知道 1.13 中的任何问题或原因,尽管发行说明中有这样的保证,但为什么会失败:“与往常一样,该版本保持了 Go 1 对兼容性的承诺。我们希望几乎所有 Go 程序都能继续编译和像以前一样跑。”
对于 docker,通过添加 tzdata 或等效包来解决。这解决了使用 go 1.13 时的问题
http://pouzek.si/blog/go-loadlocation-docker/
FROM gliderlabs/alpine:3.3
RUN apk add --no-cache tzdata
COPY out/go-loadlocation-docker /go-loadlocation-docker
ENTRYPOINT ["/go-loadlocation-docker"]
Run Code Online (Sandbox Code Playgroud)
这发生在我们身上,我们将zoneinfo.zip文件与我们的程序捆绑在一起,因为我们需要在 Windows 服务器上运行它。我们将 ZONEINFO 环境变量设置为 .zip 文件的路径,然后调用time.LoadLocation("America/Chicago"). 在 1.12 版本中这很好。我们升级到1.13版本,遇到了“系统找不到指定的路径”的问题。当调用 LoadLocation 时。
在我们的例子中,将zoneinfo.zipgolang 存储库中的捆绑文件更新到最新版本解决了该问题。我们之前使用的版本来自 commit af3c48096。不确定这是否与您遇到的问题相同,因为不清楚您是否像我们一样部署该 zip 文件,但我想我会为遇到该问题的其他人提供帮助。
注意:这仅影响未安装 Go 版本 1.13 的情况 - 当我在本地运行它时,一切都很好,因为它回退到 $GOROOT 文件夹中的版本(这是安装 1.13 时更新的版本)。该错误发生在未安装 Go 的 Windows 计算机上,如果我删除了 $GOROOT\lib\time\zoneinfo.zip 文件,也会发生在本地。