我有一个 golang 服务,需要获取处理器的架构类型
archCmd := exec.Command("uname", "-m")
arch, _ := archCmd.CombinedOutput()
我在 Intel 和 Arm 机器上运行相同的二进制文件。二进制文件是用
构建的GOOS=darwin GOARCH=amd64
在 ARM 机器上,这会获取 x86_64。自从我使用 GOARCH=amd64 构建以来,似乎就发生了这种情况。但我不确定为什么会发生这种情况。 如果我想在 intel 和 arm 机器上运行相同的构建二进制文件,我的替代方案是什么?
引用描述这个问题的评论:
运行可能在 Rosetta 下的客户端上运行的任何类型的 EDR 都会使 [
] 成为唯一有效的答案,因为这会检查底层计算机本身,而不是当前提示,这可能由于 Rosetta 而出现错误。sysctl
引用单独的超级用户答案:https://superuser.com/a/1735265/443147
您可以使用
获取有关您的 CPU 的信息:sysctl
sysctl machdep.cpu.brand_string machdep.cpu.brand_string: Apple M1 Pro
...这将需要一些条件逻辑来检测操作系统以及解析以检测 Apple CPU 类型。如果此字符串值发生更改,这可能会在将来中断。
archCmd := exec.Command("sysctl", "machdep.cpu.brand_string")
arch, _ := archCmd.CombinedOutput()
再次感谢上面链接的@selalerercapitolis 的回答。