starter/pkg/env/system.go
2026-03-28 19:29:40 +08:00

72 lines
1.6 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
}
// 场景2Intel 编译但运行在 ARM macOS 的 Rosetta 兼容模式下
if runtime.GOARCH == "amd64" {
return isAppleSiliconHardware()
}
return false
}
// isAppleSiliconHardware 底层方法:判断 macOS 硬件是否是 Apple SiliconARM
// 仅在 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
}