Go编译GUI程序时不想让程序出现命令行终端

虽然Go没有官方GUI方案,但今年(2019年)针对Go的GUI方案如井喷般迅速发展。
目前我在用的是:
https://github.com/zserge/webview
这个项目使用类似QT的QWebEngine进行HTML GUI的开发,不需要额外消耗精力学习GUI体系。
跟QWebEngine一样,采用JS注入的形式实现Go Code与JS code的互相访问。当然,你也可以在Go中直接启动一个HTTP服务器,让webview直接用HTTP协议访问APP。

在Windows平台,使用go build编译时,如果不想编译后的可执行程序启动一个命令行终端,可以使用如下命令:

go build -ldflags="-H windowsgui"

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