社内に向けてWindowsのCLIツールをgolangで書いたりなどしているが、その際に困ったことなど。
今後もハマることがあれば追加して行きたい。
Windowsにtimezone.zipがないためtime.LoadLocationでerrorになる。
A1. time.LoadLocationFromTZDataを使う
A2. 4d63.com/tzを使う
Githubにこの件のissueが立っている
Windows環境の場合time.LoadLocation(s string)は$GOROOT\lib\timezoneinfo.zipを参照するため、goをインストールしていない環境ではエラーとなる。パスは埋め込まれており変更できない。
time.LoadLocationFromTZDataはtimezoneの情報をバイト列で渡せるのでbindataとして埋め込んで渡せば解決する。timezoneのbindataも埋め込んでパッケージ化されているのが4d63.com/tzである
自身のパッケージ内ではそれでよいがgithub.com/go-sql-driver/mysqlなどはdns.goの中でtime.LoadLocationを読んでいたりする。
この場合はvendor配下(dep管理)を直接書き換えて対処している。
参考
ビルド全体についてはdtan4さんのGo でツール書くときの Makefile 晒すがとても参考になります。