Go与GUI——GO语言的图形界面Walk

Darksun · 2015-05-02 03:00:05 · 71890 次点击 · 预计阅读时间 2 分钟 · 大约8小时之前 开始浏览    
这是一个创建于 2015-05-02 03:00:05 的文章,其中的信息可能已经有所发展或是发生改变。

      GO没有原生的界面库,所以不能直接用来写GUI界面。但最近互联网上已经涌现出不少成熟、好用的第三方界面库。使用它们,就同样可以写出同C#、C++的界面。而且效率还更胜一筹。

      关于Walk界面库(官方介绍):

      Walk是一个写给Golang的Window应用程序库套件,它主要用于桌面GUI的开发,但也有更多的东西。

Part One:安装Walk

      在浏览这部分前,请确定已经配置安装完毕go语言的环境。如果没有,可以参考go官网的Install帮助。另外,注意:这个Walk库只能运行在Go 1.1.x及以上。

      要安装Walk很简单,只要运行命令:go get github.com/lxn/walk

    等待命令执行完毕,这时候检查GOPATH的src与pkg下,是否有符合自己计算机环境的walk目录。(我的电脑的CPU架构为AMD64,则会在%GOPATH%\windows_amd64\github.com\lxn下出现一个walk文件夹与编译完成的a文件,另外在%GOPATH%\src\github.com\lxn下也会出现walk的源代码)

    我们还要安装一个工具rsrc,以完成后期的打包工作,执行命令:go get github.com/akavel/rsrc

    等待命令执行完成,然后检查,步骤与上文相仿,不再多说。

Part Two:使用Walk

  这里不讲述具体的编码方式,开源的项目都可以自己看懂,而且官方也给了不少的例子,可以让你彻底了解这个库。这部分里主要讲Walk项目的编译生成。

  和其他语言的界面库相比,这个库有一点比较独特。它所生成的exe文件只有依赖于manifest才能正常运行(在其他GUI程序中,这个文件多数用于生成XP样式)。而go却没有提供资源打包的所有功能(至少在我的LiteIDE中找不到),所以要把manifest嵌入exe文件中,还需要一个工具:rsrc。

  这个工具已经在前部分中成功安装。此工具的作用是简单地将一些文件打包在syso文件中,go的编译器就可以把这些文件嵌入到exe文件中了。

  嵌入manifest的命令很简单:rsrc –manifest %manifestpath% –o % sysopath%

  比如我们要为test.exe打包一个manifest文件,只要这样做:rsrc -manifest test.manifest -o rsrc.syso

    执行完命令后,把rsrc文件移动到src下的项目目录,再执行编译命令。这时候,编译出来的exe就可以独立运行了。当然,如果你不喜欢这种方法,还可以把xxx.manifest文件改名为xxx.exe.manifest,程序同样能执行,但是发布时,必须要带着此文件一起发布。

    这个命令还有很多有趣的功能,如给exe文件加上自己喜欢的图标,命令为:rsrc -manifest main.manifest –ico icon.ico -o rsrc.syso,后续操作与前文一样。

附录:

      网上对syso文件的介绍甚少,经过我对源码的研究及生成后PE的查看。发现syso文件就是go官方对于“程序对象归档”所搞出来的一个东西,说白了就与Win下的资源文件相似。PE查看器也说明了这就是一个资源文件,存放在rsrc程序段中。


有疑问加站长微信联系(非本文作者)

本文来自:博客园

感谢作者:Darksun

查看原文:Go与GUI——GO语言的图形界面Walk

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

71890 次点击  ∙  2 赞  
加入收藏 微博
15 回复  |  直到 2019-09-08 19:19:00
CodyGuo
CodyGuo · #1 · 10年之前

有没有多点关于walk的教程啊

piaohailin
piaohailin · #2 · 8年之前

为什么每次启动exe 都有后台窗口?不能干掉吗?

rrrr
rrrr · #3 · 8年之前

<script>alert('?')</script>

xufei56789
xufei56789 · #4 · 7年之前

eval("alert('Hello world')")

xufei56789
xufei56789 · #5 · 7年之前

<script>eval("alert('Hello world')")</script>

xufei56789
xufei56789 · #6 · 7年之前

66666

tytian
tytian · #7 · 7年之前

test.manifest怎么创建呢

goal
goal · #8 · 7年之前
tytiantytian #7 回复

test.manifest怎么创建呢

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity version="1.0.0.0" processorArchitecture="x86" name="controls" type="win32" /> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="" publicKeyToken="6595b64144ccf1df" language="" /> </dependentAssembly> </dependency> </assembly>

goal
goal · #9 · 7年之前
tytiantytian #7 回复

test.manifest怎么创建呢

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity version="1.0.0.0" processorArchitecture="x86" name="controls" type="win32" />
    <dependency>
        <dependentAssembly>
            <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="" publicKeyToken="6595b64144ccf1df" language="" />
        </dependentAssembly>
    </dependency>
</assembly>
jasonzhang123
jasonzhang123 · #10 · 7年之前

竟然有人在评论中进行XSS攻击?

channel
channel · #11 · 7年之前
jasonzhang123jasonzhang123 #10 回复

竟然有人在评论中进行XSS攻击?

有些人可能无聊测试吧

hufuxinnima
hufuxinnima · #12 · 6年之前

go build -ldflags="-H windowsgui" 去除黑窗的办法 编译的时候加这个参数

tx9991
tx9991 · #13 · 6年之前

为啥我运行 go build -ldflags="-H windowsgui" F_BZ004L)@O)Y6DOI__5M_4.png

tx9991
tx9991 · #14 · 6年之前

安装的时候3{_I%}C~_~(SRXQS_CNY3JI.png

baomanxi
baomanxi · #15 · 5年之前

image.png

一样貌似链接挂了

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传