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

前提

一、docker 空鏡像(或相似環境)docker

二、Go 應用中 使用了 loc, _ := time.LoadLocation("Asia/Chongqing")數據庫

問題

$ go run ./xxx

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

緣由

時間的位置信息是從本地文件系統中提取的,大多數系統都支持它,但仍是取決於當前系統。具體的配置存儲路徑:code

$ cd /usr/share/zoneinfo

進入該目錄就能夠看到各時區的配置信息ci

$ 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

但在空鏡像(或相似的場景)中就不存在這些時區配置文件,程序引用時就會出現這個報錯io

(準確來講,出現這個問題是由於本地系統不存在 Asia/Chongqing 的時區配置文件)軟件

解決

安裝

$ apk add --no-cache tzdata

安裝這個包後,會在 /usr/share/zoneinfo 目錄下生成各時區的配置信息配置

注意,若是沒有 timezone 、locatime 的配置,須要手動處理一下rsa

最後

你知道 tzdata 是什麼嗎?簡單來說,它是時區數據庫(做爲文件和模塊)引用

這個軟件包的目的是將標準時區數據庫分佈在 cabal 軟件包中,以便它能夠在全部平臺上統一用於 Haskell 程序程序

相關文章
相關標籤/搜索