如果你的程序最终运行在 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 的绝对路径信息,只保留了相对路径。
