1.go语言能够快速编译成二进制可执行文件,能够加速程序的发布和安装流程。下面我们将编译选项和第三方压缩工具两方面来介绍如何有效地减小 Go 语言编译后的体积。
下面我们写一个简单的测试工程来测试不同方式的效果
下面的程序启动一个RPC服务,
`package main
import ( "log" "net/http" "net/rpc" ) // 编译优化
type Result struct { Num, Ans int }
type Calc int
func (calc *Calc) Square(num int, result *Result) error { result.Num = num result.Ans = num * num return nil }
func main() { err := rpc.Register(new(Calc)) if err != nil { log.Print(err) } rpc.HandleHTTP() log.Printf("Serving RPC server on port %d", 1234) if err := http.ListenAndServe(":1234", nil); err != nil { log.Fatal("Error server, err") } } go build -o main.exe main.go go build -ldflags="-s -w" -o main.exe main.go go build -o main.exe main.go && upx -9 main.exe D:\go_workspace\src\learngo\CompilerOptimization> go build -o main.exe main.go && upx -9 main.exe Ultimate Packer for eXecutables Copyright (C) 1996 - 2020 UPX 3.96w Markus Oberhumer, Laszlo Molnar & John Reiser Jan 23rd 2020
File size Ratio Format Name
10040320 -> 4958208 49.38% win64/pe main.exe Packed 1 file. go build -ldflags="-s -v" -o main.exe main.go && upx -9 main.exe D:\go_workspace\src\learngo\CompilerOptimization>go build -ldflags="-s -v" -o main.exe main.go && upx -9 main.exe
command-line-arguments
HEADER = -H10 -T0xffffffffffffffff -R0xffffffff deadcode pclntab=2218637 bytes, funcdata total 571934 bytes 130387 symbols 384800 liveness data Ultimate Packer for eXecutables Copyright (C) 1996 - 2020 UPX 3.96w Markus Oberhumer, Laszlo Molnar & John Reiser Jan 23rd 2020
File size Ratio Format Name
7425536 -> 2557440 34.44% win64/pe main.exe Packed 1 file. `
使用编译选项后,体积从原来的 9.57M 下降了 20% 到 7.08M,使用 upx 压缩后,体积进一步下降 60% 到 2.43M。累进下降约 68%,非常不可思议。
upx 压缩后的程序和压缩前的程序一样,无需解压仍然能够正常地运行,这种压缩方法称之为带壳压缩,压缩包含两个部分:
在程序开头或其他合适的地方插入解压代码; 将程序的其他部分压缩。 执行时,也包含两个部分:
首先执行的是程序开头的插入的解压代码,将原来的程序在内存中解压出来; 再执行解压后的程序。 也就是说,upx 在程序执行时,会有额外的解压动作,不过这个耗时几乎可以忽略。
如果对编译后的体积没什么要求的情况下,可以不使用 upx 来压缩。一般在服务器端独立运行的后台服务,无需压缩体积。
经过测试,如果是用upx压缩,因为可行性文件执行时提前执行一个解压缩过程,所有执行速度会稍微慢一点。 2.优化程序的主要作用是提高程序的性能和效率。具体来说,程序优化可以带来以下几方面的好处:
-
提高运行速度:优化程序可以减少不必要的计算和操作,从而减少程序的执行时间,提高运行速度。
-
减少资源消耗:优化程序可以减少程序对系统资源(包括内存、磁盘空间、网络带宽等)的消耗,提高系统的利用率。
-
提升用户体验:优化程序可以减少用户等待的时间,提高程序的响应速度和交互性,提升用户体验。
-
降低成本:优化程序可以减少计算资源的使用,从而减少硬件设备的需求,降低系统的成本。
-
提高可维护性:优化程序可以减少代码的复杂性和冗余性,提高程序的可读性和可维护性。
总的来说,程序优化可以使程序更加高效和可靠,提高系统的性能和用户体验,并降低开发和运维的成本。