在 mac 中使用 uname 获取处理器架构,当为 amd64 构建 go 二进制文件时给出不正确的结果

问题描述 投票:0回答:1

我有一个 golang 服务,需要获取处理器的架构类型

archCmd := exec.Command("uname", "-m")
arch, _ := archCmd.CombinedOutput()

我在 Intel 和 Arm 机器上运行相同的二进制文件。二进制文件是用

构建的
GOOS=darwin GOARCH=amd64

在 ARM 机器上,这会获取 x86_64。自从我使用 GOARCH=amd64 构建以来,似乎就发生了这种情况。但我不确定为什么会发生这种情况。 如果我想在 intel 和 arm 机器上运行相同的构建二进制文件,我的替代方案是什么?

go darwin rosetta uname
1个回答
0
投票

引用描述这个问题的评论:

运行可能在 Rosetta 下的客户端上运行的任何类型的 EDR 都会使 [

sysctl
] 成为唯一有效的答案,因为这会检查底层计算机本身,而不是当前提示,这可能由于 Rosetta 而出现错误。

引用单独的超级用户答案:https://superuser.com/a/1735265/443147

您可以使用

sysctl
获取有关您的 CPU 的信息:

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 的回答。

© www.soinside.com 2019 - 2024. All rights reserved.