Golang应用启动失败问题排查指南

Golang应用启动失败问题排查指南 我有一台M2芯片的Mac电脑,每次尝试启动程序时都会遇到这个错误。

Screen Shot 2022-12-23 at 1.39.24 PM

8 回复

你想运行什么程序?

更多关于Golang应用启动失败问题排查指南的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


我正在使用 Visual Studio Code,如果这有帮助的话。

如何实现?

并且直接使用 go 命令行工具是否可行?

go 可执行文件,用于编译你的程序。

其输出是规范的,而非某些编辑器的弹出窗口。

从截图中可以明显看出这一点。

这就是为什么我要求你使用命令行界面来构建和运行。

我刚开始尝试学习Go,所以不太确定CLI工具是什么。

这是一个典型的Go应用在Apple Silicon Mac上遇到的架构不匹配问题。从错误信息可以看出,你的Go程序是为amd64架构编译的,但M2芯片使用的是arm64架构。

问题原因

你的Go程序可能是通过以下方式之一获得的:

  1. 从网上下载的预编译amd64版本
  2. 在其他x86-64机器上交叉编译的
  3. 使用了错误的GOARCH环境变量编译

解决方案

方案1:重新编译程序(推荐)

# 确保使用正确的架构编译
GOOS=darwin GOARCH=arm64 go build -o your_app

# 或者直接编译(会自动检测当前架构)
go build -o your_app

方案2:检查并设置正确的环境变量

# 查看当前Go环境设置
go env GOOS GOARCH

# 如果显示amd64,可以设置为arm64
go env -w GOARCH=arm64

方案3:使用universal binary(通用二进制)

# 编译支持两种架构的通用二进制文件
go build -o your_app

# 或者显式指定
CGO_ENABLED=1 go build -o your_app

方案4:如果必须运行amd64版本

# 使用Rosetta 2运行x86_64版本
arch -x86_64 ./your_app

验证解决方案

编译后检查二进制文件的架构:

# 使用file命令检查
file your_app

# 应该显示类似这样的信息:
# your_app: Mach-O 64-bit executable arm64

示例:完整的重新编译流程

# 1. 清理旧的二进制文件
rm -f your_app

# 2. 设置正确的架构(如果需要)
export GOARCH=arm64

# 3. 重新编译
go build -o your_app

# 4. 运行
./your_app

这个问题在M1/M2 Mac上很常见,重新为arm64架构编译即可解决。

回到顶部