社内に向けて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 晒すがとても参考になります。