panic: time: missing Location in call to Time.In

煎鱼 · · 2320 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

前提

1、docker 空镜像(或类似环境)

2、Go 应用中 使用了 loc, _ := time.LoadLocation("Asia/Chongqing")

问题

$ go run ./xxx

panic: time:missing Location in call to Time.In

原因

时间的位置信息是从本地文件系统中提取的,大多数系统都支持它,但还是取决于当前系统。具体的配置存储路径:

$ cd /usr/share/zoneinfo

进入该目录就可以看到各时区的配置信息

$ ls
+VERSION    Australia   EET         Factory     Greenwich   Jamaica     Mexico      Poland      US          posixrules
Africa      Brazil      EST         GB          HST         Japan       NZ          Portugal    UTC         zone.tab
America     CET         EST5EDT     GB-Eire     Hongkong    Kwajalein   NZ-CHAT     ROC         Universal
Antarctica  CST6CDT     Egypt       GMT         Iceland     Libya       Navajo      ROK         W-SU
Arctic      Canada      Eire        GMT+0       Indian      MET         PRC         Singapore   WET
Asia        Chile       Etc         GMT-0       Iran        MST         PST8PDT     Turkey      Zulu
Atlantic    Cuba        Europe      GMT0        Israel      MST7MDT     Pacific     UCT         iso3166.tab

但在空镜像(或类似的场景)中就不存在这些时区配置文件,程序引用时就会出现这个报错

(准确来说,出现这个问题是因为本地系统不存在 Asia/Chongqing 的时区配置文件)

解决

安装

$ apk add --no-cache tzdata

安装这个包后,会在 /usr/share/zoneinfo 目录下生成各时区的配置信息

注意,如果没有 timezone 、locatime 的配置,需要手动处理一下

最后

你知道 tzdata 是什么吗?简单来讲,它是时区数据库(作为文件和模块)

这个软件包的目的是将标准时区数据库分布在 cabal 软件包中,以便它可以在所有平台上统一用于 Haskell 程序


有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:煎鱼

查看原文:panic: time: missing Location in call to Time.In

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2320 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传