写完一个Go程序,想在Windows上直接双击运行?不用装Go环境也能跑?这时候就得把代码打包成exe文件。这事儿不难,Go本身支持跨平台编译,几条命令就能出结果。
先确认你的Go环境没问题
打开终端,输入 go version 看看有没有输出版本号。如果提示“命令未找到”,那得先去官网下个Go安装包,装好后顺手配一下环境变量。这步跟装微信、QQ差不多,一步步点下一步就行。
写个简单程序试试水
比如你有个叫 main.go 的文件,内容是:
package main
import "fmt"
func main() {
fmt.Println("Hello,这是我的第一个exe程序")
}
这个程序啥也不干,就打印一句话。但它足够用来测试打包流程。
一条命令生成exe
在当前目录打开终端,运行:
GOOS=windows GOARCH=amd64 go build -o myapp.exe main.go
注意这里的 GOOS=windows 是告诉编译器:我要生成Windows能跑的程序。如果你在Mac或Linux上开发,也照样能出exe。这就是Go的交叉编译能力,挺方便的。
执行完命令后,目录里会多出一个 myapp.exe 文件。把它发给用Windows的朋友,双击就能看到打印结果。
不想带控制台窗口?可以隐藏
默认打包出来的exe会弹黑框,哪怕你程序没用到命令行。如果想做个安静运行的后台工具,加个编译标签就行:
GOOS=windows GOARCH=amd64 go build -ldflags "-H windowsgui" -o myapp.exe main.go
这样生成的程序启动时不显示控制台窗口,适合做图形界面或者后台服务类应用。
减小exe体积的小技巧
刚打包出来的exe可能几MB起步,主要是包含运行时和调试信息。发布时可以压缩一下:
go build -ldflags "-s -w" -o myapp.exe main.go
-s 去掉符号表,-w 去掉调试信息,打完再用UPX这类工具压一压,体积能砍掉一半都不止。
多个文件也能一起打
项目大了难免拆成几个go文件,比如 main.go、utils.go、config.go 都在同一个目录。这时候直接 go build 就行,不用一个个列:
GOOS=windows GOARCH=amd64 go build -o mytool.exe .
最后那个点代表当前目录,Go会自动找入口函数并打包所有相关文件。
现在你写的工具不管是在公司内网传,还是发给亲戚朋友用,都不用再解释“你得先装Go”这种麻烦事了。一个exe丢过去,点开就跑,省心多了。