Go 当编译为x86时,检测操作系统x86或x64

Go 当编译为x86时,检测操作系统x86或x64,go,x86,cross-platform,cpu-architecture,32bit-64bit,Go,X86,Cross Platform,Cpu Architecture,32bit 64bit,我开发了引导软件来开始我的游戏。我是用围棋做的。跨平台对我来说尤其重要。另外,我不想将下载链接分成两部分,即x86/x64。我想在一个输出中处理所有事情。这就是为什么我必须编译到x86。执行此操作时,无法正确检测操作系统是否为x86或x64 在编译为x86的软件中,如何正确检测操作系统x86或x64(在Go中) 当编译为x86时,此代码不正确 const is64Bit = uint64(^uintptr(0)) == ^uint64(0) 在Windows上确定您是否是在64位操作系统上运行

我开发了引导软件来开始我的游戏。我是用围棋做的。跨平台对我来说尤其重要。另外,我不想将下载链接分成两部分,即x86/x64。我想在一个输出中处理所有事情。这就是为什么我必须编译到x86。执行此操作时,无法正确检测操作系统是否为x86或x64

在编译为x86的软件中,如何正确检测操作系统x86或x64(在Go中)

当编译为x86时,此代码不正确

const is64Bit = uint64(^uintptr(0)) == ^uint64(0)
在Windows上确定您是否是在64位操作系统上运行的32位进程。请注意,如果您是在64位操作系统上运行的64位进程,则返回false;如果您有一个64位进程在运行,则您知道该操作系统是64位的,否则它不会运行

还请注意,32位Windows被认为是过时的


在Linux上,您可以调用并查看
机器
字段。请注意,它们中的大多数将与您的程序不兼容,只有
i386
i686
x86\u 64
,您可能需要实际询问操作系统,在这种情况下,这当然取决于您使用的操作系统。我不需要特定操作系统的信息。编译的程序将是跨平台的,它应该能够在所有操作系统上工作。不同的操作系统使用不同的可执行格式;这并不是说你可以在GNU/Linux系统、Mac或Windows上运行一个二进制文件。当然,您可以使用相同的可移植检测代码在为当前操作系统构建的其他两个可执行文件之间进行选择(例如,处理操作系统差异的一些库),但您应该做好准备,以防出现不可能的情况。AFAIK,在x86 asm中(只运行用户空间asm指令,不进行系统调用)无论您是在32位保护模式(在“传统模式”32位操作系统下)还是在32位兼容模式(在64位操作系统下为长模式的子模式:)。@PeterCordes那么,我应该通过在网站上放置两个单独的下载链接(x64 x32位)来解决此问题吗?例如,不和谐是如何解决这个问题的?Discord只有一个下载链接。