存档

‘Golang’ 分类的存档

压缩 Golang 编译的可执行文件体积

2018年1月1日 没有评论

自从接触 Golang 以来,一直对其编译出来的可执行文件有点看法,因为体积比较大。使用 go build av.go,编译简单的代码出来后就有近8M,当然,这是因为把 Go 的运行时环境也给打包进去了的原因,为了几k的源码实在是不划算,特别是在香蕉派/Firefly这些磁盘空间紧张的设备上面。

今天有搜索一下解决方法,Golang 的先行者给出的思路一共分为2步。

第一步,添加编译符号。

go build -ldflags “-s -w” av.go

-s 相当于strip掉符号表, 但是以后就没办法在gdb里查看行号和文件了。
-w 告知连接器放弃所有debug信息

衣服自己洗是使用 LiteIDE 来编写go代码的,按照下图添加即可,注意不要忘记添加引号,不然编译是无法通过的。

这样一来,编译后的文件就是5M多,看起来还是有点效果。

第二步,我们使用UPX来进一步压缩,其地址为 https://github.com/upx/upx,下载对应的版本即可。使用起来也很简单,默认即为压缩,输入upx av.exe 即可。

-d 解压缩
-l 查看压缩前后信息

现在再看,体积已经到1.7M左右了,效果很明显,就问你惊不惊喜,意不意外。

由于以前有木马病毒也使用UPX来加壳,导致现在杀毒软件对UPX不太友好。如果是部署在服务端或者Linux系统应该还好,特别是面向windows用户发布的,各位同学请慎重,可以考虑添加数字签名。至于如何使用数字签名,可以参考我的另外一个帖子。

对于产线的 Release 编译,使用自动化工具来做这个事情,应该都是小菜一碟了,就不提了。

分类: Golang, 日常 标签: , ,

Golang 时间格式化

2017年6月15日 没有评论

这几天在用Go写个小工具,里面需要用到时间格式化。

一个方法是 time.Now().Format(“2006-01-02 15:04:05”),开始还好奇Go还可以这样直接识别出格式,不像C#那样 yyyy-MM-dd 这样的。后来发现原来这个时间是固定的,不能修改,否则格式化后的字符就不是期待的值。

真是个太奇葩的格式化字符常量了。

 

分类: Golang, 一句话 标签: ,