本地编译后上传到服务器执行,提示无法执行二进制文件,权限也给了。日志里能对上时间点,这种反而好排。

编译目标的操作系统与架构和服务器不一致,比如在 ARM 机器上跑了 amd64 产物。这一点先确认清楚,后面就不用反复试。

set GOOS=linux
set GOARCH=amd64
set CGO_ENABLED=0
go build -o app main.go
file app

这次卡住的地方就在「Go 交叉编译」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。

报错里带路径的,先去看那个路径在不在、权限对不对。同一份配置存在多处的,先确认改的是被加载的那一份。

新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。

处理上按这个顺序:确认服务器架构;按目标平台设置环境变量重新编译;静态链接避免依赖缺失。

结果对不对很好判断,file 命令显示的目标架构与服务器一致,程序能正常启动。

作者 9823189