核心命令示例: go build -ldflags=“-s -w -H windowsgui” main.go
前言:
本人是学了python再过来玩golang的,在python中,我能实现的最小打包方式,就是基于tkinter写GUI界面,然后用pyintaller打包工具进行打包,打包完毕后用upx软件进行压缩,完了后exe可执行文件的体积大概就是8m左右
实践:
那么golang打包exe文件的体积一般是多少呢?
经过测试,用官方的打包方式 go build packagename 比如go build main.go,其中我main.go代码如下:
然后开启Upx软件,给压缩一下,大概搞掉了三分之二的体积,得到一个4MB的exe可执行文件
不尽人意的地方还是有两处,一,我这个是gui界面的,我不想要黑窗口啊。
二,我这个体积4MB还是有点大,能不能再小点。
so,再研究了一下官方的go build,发现有个-ldflags参数,可以实现这个效果:
怎么用呢?参见下面这行代码,在terminal或者cmd里面敲的
go build -ldflags=“-s -w -H windowsgui” main.go AI生成项目 那么具体里面这段 -ldflags=“-s -w -H windowsgui” 是什么意思呢?
-ldflags=“参数”: 表示将引号里面的参数传给编译器 -s:去掉符号信息 (这样panic时,stack trace就没有任何文件名/行号信息了,这等价于普通C/C+=程序被strip的效果) -w:去掉DWARF调试信息 (得到的程序就不能用gdb调试了)
-H windowsgui : 以windows gui形式打包,不带dos窗口。其中注意H是大写的
ok,正常运行并且没有dos窗口,然后体积还只能2423kb,比起最初的12271kb足足小了80%,因为12271*20%就是2423啊,哈哈我数学还行吧
如此说来是不是爽歪歪呢,那么我再看一下,还有没有可能精简大小呢
我们现在试试新建一个test.go,里面只写一个Hello world,然后打包带个dos再upx看看体积有多大 这里用到输入是为了阻塞线程,要不然打包后执行exe就会发下dos窗口一闪而过就没了。
现在打包一下看看,打包最小的带黑窗口的:
go build -ldflags=“-s -w ” test.go 好了,这是我打包过的最小的go程序了,竟然才507kb.双击运行一下看看是否正常 启动后在阻塞状态,等待用户输入,然后按个回车键就运行完毕结束程序了。
所以总结了一下,引入的gui库,几行代码,2423kb的体积比这个500kb的原生dos程序到了1900多kb,说明这些多出来的体积都是gui库的,然后我们再想压缩这个体积,就只有一个方法了,那就是慢慢地去寻找有没有比这个库更小的,本次测试用的这个库是Fyne,因为我发现它在类似gui库中星数挺多,更新挺勤快的。后面有机会我还想测试一下qt之类的库。经过我的多次尝试,确实找到一个特别小的GUI库ndlabs,最后编译的exe经过upx后最小700kb,不过界面甚是原生。相关的用法我贴个地址吧: 好了,博客到此结束,不知道你是否学到了一点用GO做gui的想法呢。python都能做GUI,这里用Go来做,不乏是一个很好的尝试,因为打包的体积比python小啊,python最小8m,这个今天测试go的都才 2MB多点,而且python程序运行速度跟go比起来不是一个级别的,而且go语言打包的程序跟java一样,并不会被360等安全软件误报毒,是不是有点激动?
慢着,其实还没结束呢。因为我们现在搞出来的程序,没有图标,没有版权信息,那么该怎样加上呢?
其实很简单,编译好了,然后自己用外部工具给exe加上这些信息,然后再upx
这里推荐使用 ResourceHacker,自己百度一下下载就行了
图标也加上了,版权信息也加上了。这回真没有了。对了。补充说明,一定要go build出来后就把这些东西加了再用upx压缩,千万别先upx了再加,因为那样的程序我亲测是不能运行的。然后理论上这个方法是能改python里面用pyinstaller打包的exe的哦,只不过pyinstaller自带这种带图标打包的操作。在此也不多提,具体可以看我博客里Python相关内容
最后再补充,就是推荐用goland这款ide来写go项目。原因在于我是python过来的,用习惯了pycharm这款ide,正好goland和pycharm的操作一模一样。
用goland把编译exe命令加入到外部工具: 然后就发现main.exe已经和源码躺在一起了。后面你只需要加个图标,版权,然后手动upx一下就能发布了。
很嗨皮哦!
有用记得点个关注,谢谢
最后安利一波全球最强的golang GUI快速开发库,利用拖拽生成GUI界面并且控件众多,体验很好。
国人良心开发,总项目代码超过40w行,虽然星星少了点,但是真的好用。然后就是这么生成的exe文件经过最优压缩,轻轻松松变成2.5mb左右的单文件体积,非常好使。