package env import ( "runtime" "strconv" "syscall" ) // IsWindows 判断当前系统是否是 Windows func IsWindows() bool { return runtime.GOOS == "windows" } // IsLinux 判断当前系统是否是 Linux func IsLinux() bool { return runtime.GOOS == "linux" } // IsMacOS 判断当前系统是否是 macOS func IsMacOS() bool { return runtime.GOOS == "darwin" } // IsMacIntel 判断当前 macOS 系统是否是 Intel 架构(x86_64) // 非 macOS 系统返回 false func IsMacIntel() bool { if !IsMacOS() { return false } // 先通过 GOARCH 快速判断,兼容绝大多数场景 if runtime.GOARCH == "amd64" { // 验证硬件是否真的是 Intel(避免 Rosetta 兼容模式误判) return !isAppleSiliconHardware() } return false } // IsMacArm 判断当前 macOS 系统是否是 ARM 架构(Apple Silicon/M1/M2/M3) // 非 macOS 系统返回 false func IsMacArm() bool { if !IsMacOS() { return false } // 场景1:原生 ARM 编译运行(GOARCH=arm64) if runtime.GOARCH == "arm64" { return true } // 场景2:Intel 编译但运行在 ARM macOS 的 Rosetta 兼容模式下 if runtime.GOARCH == "amd64" { return isAppleSiliconHardware() } return false } // isAppleSiliconHardware 底层方法:判断 macOS 硬件是否是 Apple Silicon(ARM) // 仅在 macOS 下调用有效,返回 true 表示 ARM 硬件,false 表示 Intel 硬件 func isAppleSiliconHardware() bool { val, err := syscall.Sysctl("hw.optional.arm64") if err != nil { return false } num, err := strconv.Atoi(val) if err != nil { return false } return num == 1 }