go build ldflags

示例

go build -ldflags "-w -s -X main.Version=${VERSION} -X main.Build=${BUILD}"

解释

-w 去掉DWARF调试信息,得到的程序就不能用gdb调试了。

-s 去掉符号表,panic时候的stack trace就没有任何文件名/行号信息了,这个等价于普通C/C++程序被strip的效果,

-X 设置包中的变量值

golang 程序运行影藏dos黑窗口

通过go的标准库exec调用cmd命令时会闪弹黑窗口,为解决此问题在windows下可以用win32 API 的 WinExec。

此问题主要出现在带UI或无控制台的程序调用cmd时。

编译go时加入参数: go build -ldflags=”-H windowsgui”

golang可执行文件瘦身(缩小文件大小)

起因
golang部署起来极其遍历,但有时候希望对可执行文件进行瘦身(缩小文件大小)

尝试
情况允许情况下,交叉编译为32位
删除不必要的符号表、调试信息
尝试用对应平台的upx打压缩壳
解决
经过多次尝试,确定如下步骤效果最好(以windows 10下环境为例)

目标

package main

import (
    "fmt"
)

func main() {
    fmt.Println("Hello World!")
}

步骤
修改GO环境变量为 win32(可选)GOARCH=386 GOOS=windows
编译无符号表和调试信息的可执行文件 go build -ldflags “-s -w”
调用upx压缩 .\upx.exe -9 .\HiGo.exe
结果
处理前:64位=>1.97M 32位=>1.75M
处理后:64位=> 504K 32位=>479K

文档更新时间: 2021-04-02 09:21   作者:月影鹏鹏