Go语言时区陷阱,在windows平台下部署时报错

Go语言编写的程序,如果直接或者间接使用到了时间和时区等API,在没有安装Go编译环境的Windows电脑上就会很容易报错:
The system cannot find the file specified.
在一些与数据库相关的外部库上,比如gorm,就发生了上述问题。

问题产生的原因是系统无法获取当前的时区数据。在安装了Go编译环境的机器上,程序可以通过GOROOT环境变量去搜索,从而找到想要的文件,这个文件名为zoneinfo.zip,在GOROOT/lib/time路径下。因此想要在没有安装Go编译环境的机器上想要解决这个问题,并不需要安装完整的Go编译环境,只需要将这个360K大小的文件附带程序打包给客户,同时在主程序中还要加上os的判断,如果判断为windows,需要将这个文件设置到名为ZONEINFO的系统变量中去,一份可行的代码为:

import "runtime"
import "os"

sysType := runtime.GOOS
if(sysType == "windows"){
    os.Setenv("ZONEINFO", ".\\zoneinfo.zip")
}