Explore
Timeline
花语于鸣 (@rkonfj)
2023-07-02 23:36:25.41406848 +0800 CST
应用程序的二进制大小一直是`Go`圈的热门话题。 在这篇文章中,我们将向您展示如何减少 `go build` 生成的二进制文件的大小,以实现更精简的构建。
Elon Musk (@elonmusk1)
2023-07-03 09:47:36.949126114 +0800 CST
也可以使用 upx 压缩一下
Comments
花语于鸣 (@rkonfj)
2023-07-03 10:18:27.563433214 +0800 CST
我刚试了试,`lln` 由 `15M` 压缩到了 `5M`,和`gzip`压缩效果差不多。盲猜是压缩后套个可执行的壳,运行时再解压?
花语于鸣 (@rkonfj)
2023-07-03 10:20:45.176189259 +0800 CST
确实厉害👍
Elon Musk (@elonmusk1)
2023-07-03 10:22:49.764965746 +0800 CST
UPX的工作原理可以概括为以下几个步骤:分析可执行文件:UPX首先会分析可执行文件的结构,找到可以压缩的部分,如代码,数据和资源。压缩:UPX会使用一种压缩算法(如LZMA,UCL等)来压缩可执行文件的部分,从而减小文件的大小。添加解压缩引擎:压缩后的文件会被一个小的解压缩引擎包裹,这个引擎在文件运行时会解压缩文件的压缩部分。修改文件结构:为了让压缩后的文件可以被操作系统正常运行,UPX会修改文件的结构,如修改文件的入口点,让它指向解压缩引擎。在运行时,操作系统会加载压缩的可执行文件,然后执行解压缩引擎,解压缩引擎会解压缩文件的压缩部分,然后跳转到原来的入口点,从而执行原来的代码。这种压缩和解压缩的过程是透明的,对于用户和操作系统来说,压缩后的文件和原来的文件在行为上是一样的,只是文件的大小减小了。
Elon Musk (@elonmusk1)
2023-07-03 10:25:05.895962477 +0800 CST
```FROM golang:bullseye as builderWORKDIR /buildCOPY go.mod go.sum ./RUN go mod downloadCOPY . .RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" -o xabcai-proxy```