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")
}

将ajax请求的数据变成文件供浏览器下载

            dbbackupService.download(filename).then(res => {
                console.log("dbbackupService.download.call", res);
                var blob = new Blob([res], { type: 'text/plain;charset=utf-8' })
                var downloadElement = document.createElement('a');
                var href = window.URL.createObjectURL(blob); //创建下载的链接
                downloadElement.href = href;
                downloadElement.download = 'backup.sql'; //下载后文件名
                document.body.appendChild(downloadElement);
                downloadElement.click(); //点击下载
                document.body.removeChild(downloadElement); //下载完成移除元素
                window.URL.revokeObjectURL(href); //释放掉blob对象
            });

QWebEngineView在Win10下无法正常显示

QWebEngineView对环境的要求还是挺高的
首先需要检查硬件支持OpenGL的版本,至少2.0以上,如果硬件达不到OpenGL2.0,大多数情况下是无法正常运行的。
可以试试main函数开头添加:

QCoreApplication::setAttribute(Qt::AA_ShareOpenGLContexts);
QCoreApplication::setAttribute(Qt::AA_UseSoftwareOpenGL);

试着解决。

如果硬件达标,但是在Win10上还是无法正常运行,有可能是硬件太强悍,分辨率太高导致的,需要在main函数入口处加以下设置

QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
丁丁生于 1987.07.01 ,30岁,英文ID:newflydd
  • 现居住地 江苏 ● 泰州 ● 姜堰
  • 创建了 Jblog 开源博客系统
  • 坚持十余年的 独立博客 作者
  • 大学本科毕业后就职于 中国电信江苏泰州分公司,前两年从事Oracle数据库DBA工作,两年后公司精简技术人员,被安排到农村担任支局长(其本质是搞销售),于2016年因志向不合从国企辞职,在小城镇找了一份程序员的工作。
  • 在 Git OSChina 上积极参与开源社区
  •