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

记一次EtherCAT IO扩充

因业务需要,现需要将EtherCAT的IO点位扩充至128入128出。设计过程中碰到以下问题,一一解决掉了:

SSC生成的XML文件,EEPROM烧录后,提示:AdsError:1818, query interface failed.

具体报错截图如下:

问题原因:使用SSC时,import的LAN9252-SDK,此后生成的XML文件经测试会导致这一问题,无论SSC5.11还是5.12,无论IO怎么规划,生成的XML烧录进eeprom都会报这个错误。

解决办法:使用SSC生成XML时,不要import LAN9252的SDK,直接使用最原始的模板建立SSC功能,如下图所示:

用SSC生成协议栈代码时,再用LAN9252的SDK。

DC模式下进不了OP

问题原因:这个比较低级,定时中断,和三个外部中断配置有误,CubeMX配置时要小心。

解决办法:中断向量这么配置:

static void MX_NVIC_Init(void) {
    /* EXTI2_IRQn interrupt configuration */
    HAL_NVIC_SetPriority(EXTI2_IRQn, 1, 2);
    //HAL_NVIC_EnableIRQ(EXTI2_IRQn);
    /* EXTI1_IRQn interrupt configuration */
    HAL_NVIC_SetPriority(EXTI1_IRQn, 1, 1);
    //HAL_NVIC_EnableIRQ(EXTI1_IRQn);
    /* EXTI0_IRQn interrupt configuration */
    HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0);
    //HAL_NVIC_EnableIRQ(EXTI0_IRQn);
    /* TIM8_UP_TIM13_IRQn interrupt configuration */
    HAL_NVIC_SetPriority(TIM8_UP_TIM13_IRQn, 1, 0);
    HAL_NVIC_EnableIRQ(TIM8_UP_TIM13_IRQn);
}

这样一个定时器中断和三个外部中断上电后不会一下子启动,协议栈会启动这些中断,注意不要把定时器中断的使能关掉,定时器中断的还有另一个函数用来控制启动和停止:HAL_TIM_Base_Start_IT(&htim8);,这个在协议栈的宏中配置好。

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