Go语言学习(8) 第一个GO语言的GUI图形窗体
https://www.toutiao.com/i6930588598840508931/?group_id=6930588598840508931
前面我做的小示例都是命令行工具,执行在命令行,运行结果也以命令行输出。
这种命令行方式是DOS时代的产物,也是操作系统底层的最基本的人机交互方式。电脑中黑客们都是搞键盘代码,linux系统中也是通篇都是命令行方式。系统可以没鼠标,但不能没有键盘命令行方式。下面是常用的linux命令
但是系统在发展,复杂的命令行让用户望而生畏。用户对美观的图形界面的向往是合理的需求。
但是为什么GO语言没有官方GUI图形界面包 ?难道vb6 vbnet/C# 起步就有的图形界面这么难实现么?
这些问题很好,可能需要写长篇大论来阐述这个问题,这是简单这样回复一下:
一,go语言要适应跨平台需求:
每个平台有不同的GUI实现方式,图形接口非常复杂,同学们看看跨平台GUI做得最好的QT有多大就明白了。前面说的vb6 vbnet/C# 没有这个需要,只考虑在win平台,那就是只用调用WinAPI就行了。因为系统已经准备好了GUI,只让建构上平台上的程序调用就行了。
二、go语言主要应用于面向服务器级高并发响应。
golang目前的设计重点还在后端,GUI主要作为前端应用。在服务器端作为高速响应后台,拖一个GUI界面是很大累赘。甚至是完全没必要的。
三、第三方已经推出了一系统可用的GUI
跨平台的方案有therecipe/qt 、andlabs/ui、sciter-sdk/go-sciter、electron/js等
不跨平台比如win下的lxn/walk,它以 Windows API 做的 GUI库,他的 性能 和 功能都很完美,目前没有太大的缺陷!
使用方法
第1步:引入
go get github.com/lxn/walk支持库
第2步:创建一个基础walk窗体
创建MainWindow,使用Layout布局,添加一个PushButton和TextEdit
第3步:在工程文件中加入一个系统ICO文件,如我使用的sun.ico
第4步:在工程文件中加入一个win.manifest文件,内容为
<?xml version='1.0' encoding='UTF-8' standalone='yes'?><assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0' xmlns:asmv3='urn:schemas-microsoft-com:asm.v3'> <assemblyIdentity version='1.0.0.0' processorArchitecture='*' name='SomeFunkyNameHere' type='win32'/> <dependency> <dependentAssembly> <assemblyIdentity type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'/> </dependentAssembly> </dependency> <asmv3:application> <asmv3:windowsSettings xmlns='http://schemas.microsoft.com/SMI/2005/WindowsSettings'> <dpiAware>true</dpiAware> </asmv3:windowsSettings> </asmv3:application></assembly>
第5步:引入go get github.com/akavel/rsrc
查看d:\gopath\bin目录下会下载到一个rsrc.exe文件
第6步:使用命令行
..\..\bin\rsrc -manifest win.manifest -ico sun.ico -o win.syso
把win.manifest和sun.ico图标编译成win.syso
完成这步后,工程目录中会生成一个win.syso的文件。以后其他win go的工程如果没有变更win.manifest和sun.ico的话,win.syso是可以直接复制到其他项目中使用的。因此以后工程中上面第5步和第6步可以省略
第7步:命令行使用go build -ldflags='-H windowsgui',把当前项目编译成GUI窗体,如果只用go build编译,将只看到一个窗体一闪就关掉了。
最后生成的win GUI窗体,虽然简单,只包括一个功能按钮和文本框作为输出
这个Golang版的GUI小程序,读取了一个excel文件中的所有表名,列表显示在文本框中。后面我将依托这个框架演示一下golang读写excel的小代码。
说明一下,golang读写excel是不依赖系统office的,也就是在没有安装excel的系统中,包括服务器中都是可以使用的,这点是那些依赖office的软件做不到的。