如果你的程序最终运行在 windows 服务器
// 不需要设置任何参数编译出windows服务器可执行程序
// -o demo_goskeleton.exe ,指定编译出的文件名
// -ldflags "-w -s" -trimpath ,参考交叉编译介绍
go build -o demo_goskeleton.exe -ldflags "-w -s" -trimpath cmd/(web|api|cli)/main.go
交叉编译(windows直接编译出linux可执行文件)
// goland 终端底栏打开`terminal`, 依次执行以下命令,设置编译前的参数
// 特别注意: 以下三个命令执行时,前后不要有空格,否则最后编译可能会报错,无法编译出最终可执行文件
# 追加 env -w 表示将值写入环境变量,否则每次只是临时生效,
# 对于运行在linux服务器的程序后续编译就不需要重复设置编译前的参数,如果程序最终运行在windows,则编译参数 GOOS=windows
// cpu架构
go env -w GOARCH=amd64
// 程序运行的最终系统,linux、windows、darwin(苹果macos系统)
go env -w GOOS=linux
// window编译设置Cgo模块关闭,因为windows上做cgo开发太麻烦,如果引用了Cgo库库,那么请在linux环境开发、编译
go env -w CGO_ENABLED=0
// 编译出最终可执行文件,进入根目录(GinSkeleton所在目录,也就是 go.mod 所在的目录)
// 编译时建议追加参数:-ldflags "-w -s" ,同时会压缩编译后的体积。
// -w 表示去除调试信息,禁止gdb调试,
// -s 表示去除符号表(符号表在链接时起着按符号寻址的作用,静态编译后用不到)
// 追加参数编译后的程序体积也会比原来减少25%左右.
// -trimpath 表示去除绝对路径信息,只保留基于 go.mod 开始的相对路径信息
// web|api|cli 三个目录选择其一即可,表示编译的入口目录
go build -o demo_goskeleton -ldflags "-w -s" -trimpath cmd/(web|api|cli)/main.go
关于 -trimpath 参数的使用效果:
1.如果windows 交叉编译时不设置-trimpath
,可执行文件在linux环境报错时会带有windwos路径信息
2.追加 -trimpath
参数之后,linux 环境已经去除了 windows 的绝对路径信息,只保留了相对路径。