当前位置: 首页 >  技术宝典 >  golang编译最小可执行文件

golang编译最小可执行文件

导读:前言.我们在使用go语言时,最方便莫过于将编译好的二进制文件直接拷贝到服务器中运行即可,但是随着代码工程的复杂可能导致二进制文件很大,这会造成传输过程的时间成本变大,如果在频繁构建,发布中,无疑会增加一些成本,所以有时候考虑将二进制文件编译的越小越好变得算是一件重要的事情,.那么

前言

我们在使用go语言时,最方便莫过于将编译好的二进制文件直接拷贝到服务器中运行即可,但是随着代码工程的复杂可能导致二进制文件很大,这会造成传输过程的时间成本变大,如果在频繁构建,发布中,无疑会增加一些成本,所以有时候考虑将二进制文件编译的越小越好变得算是一件重要的事情, 那么如何将编译的文件最小化呢,下面介绍两种方法

一。 使用自带工具

  1. 使用 -ldflags参数
    在程序编译的时候可以加上-ldflags "-s -w"参数来优化编译程序, 其实通过去除部分连接和调试等信息来使得编译之后的执行程序更小,具体参数如下:docker

    -a 强制编译所有依赖包
    

    -s 去掉符号表信息, panic时候的stack trace就没有任何文件名/行号信息了. -w 去掉DWARF调试信息,得到的程序就不能用gdb调试了

  2. 如执行如下命令可得到优化编译过的test可执行程序: 4.8M

    go build -ldflags -w test.go
    

不建议s和w同时使用。

  1. 编译Dockerfile使用的二进制文件

    CGO_ENABLED=0 go build -a -tags netgo -ldflags '-s -w'
    

二.使用upx

  1. 上面golang build时加上-ldflags参数得到了比较小的可执行程序,但是还可以通过upx这个开源,绿色,好用的压缩工具进行进一步压缩,首先其下载地址:http://upx.sourceforge.net/#downloadupx

  2. linux 系统选择下载:upx-3.91-amd64_linux.tar.bz2即可, 然后 tar -xvf upx-3.91-amd64_linux.tar.bz2进入到解压文件夹中将可执行文件upx 拷贝到/usr/bin就可以全局执行了

    apt install upx
    
内容
  • 三维模型轻量化在移动应用场景的如何发挥作用
    三维模型轻量化在移动应用场景的如
    2023-12-01
    在移动应用场景中,三维模型的重量对于应用的性能、流畅度和用户体验都有很大的影响。而三维模型轻量化技术可以通过减少模型数据
  • 旋转网格超采样(Rotated Grid Supersampling)
    旋转网格超采样(Rotated
    2023-12-06
    旋转网格超采样(Rotated Grid Supersampling).这是对文章 4-Rook Antialiasin
  • gitlab ci 集成 eslint/prettier/tsc 做代码审查,并使用 eslint 输出作为显示代码质量
    gitlab ci 集成 esl
    2023-12-09
    前言.想自动化一下公司里代码的部分审查,最初想用 reviewdog 的,但是公司的域名基本都在 VPN 中访问的,gi
  • 什么是软件供应链?
    什么是软件供应链?
    2023-12-05
    1 软件供应链定义.需方和供方基于供应关系,开展并完成软件采购、开发、交付、获取、运维和废止等供应活动而形成的网链结构。
  • 在idea/webstorm等terminal运行命令报错:Command rejected by the operating system没有权限【已解决】
    在idea/webstorm等t
    2023-12-10
    在idea/webstorm等编译器terminal窗口运行命令报错:Command rejected by the o
  • 实时光线追踪(3)Ray Casting
    实时光线追踪(3)Ray Cas
    2023-12-01
    目录.硬件光追(Hardware Ray Tracing).加速结构(Acceleration Structure,AS