feat(platform): 多平台检测/路径/信号/系统信息(含跨平台构建验证)
This commit is contained in:
1 parent
efed5f05b1
commit
1d4bed415f
6 files changed
+276
No files matched your search
@@ -0,0 +1,108 @@
|
||||
// Package platform centralizes OS detection, path resolution, signal handling,
|
||||
// and runtime system information. Other packages must never call syscall or
|
||||
// hard-code OS paths; they resolve everything through this package.
|
||||
package platform
|
||||
|
||||
import (
|
||||
"os"
|
||||
"runtime"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
// Info describes the host platform.
|
||||
type Info struct {
|
||||
Name string // human-readable platform name
|
||||
GOOS string
|
||||
GOARCH string
|
||||
Kind string // platform family: desktop / server / mobile / unknown
|
||||
CPUs int
|
||||
Host string
|
||||
GoVer string
|
||||
}
|
||||
|
||||
// Detect returns runtime-derived platform information.
|
||||
func Detect() Info {
|
||||
return Info{
|
||||
Name: platformName(runtime.GOOS),
|
||||
GOOS: runtime.GOOS,
|
||||
GOARCH: runtime.GOARCH,
|
||||
Kind: platformKind(runtime.GOOS),
|
||||
CPUs: runtime.NumCPU(),
|
||||
Host: hostname(),
|
||||
GoVer: runtime.Version(),
|
||||
}
|
||||
}
|
||||
|
||||
// GOOS returns the operating system name (runtime.GOOS).
|
||||
func GOOS() string { return runtime.GOOS }
|
||||
|
||||
// GOARCH returns the CPU architecture name (runtime.GOARCH).
|
||||
func GOARCH() string { return runtime.GOARCH }
|
||||
|
||||
// CPUs returns the number of logical CPUs visible to the runtime.
|
||||
func CPUs() int { return runtime.NumCPU() }
|
||||
|
||||
// IsWindows reports whether the host is Windows.
|
||||
func IsWindows() bool { return runtime.GOOS == "windows" }
|
||||
|
||||
// IsDarwin reports whether the host is macOS.
|
||||
func IsDarwin() bool { return runtime.GOOS == "darwin" }
|
||||
|
||||
// IsLinux reports whether the host is Linux.
|
||||
func IsLinux() bool { return runtime.GOOS == "linux" }
|
||||
|
||||
// IsUnix reports whether the host is a Unix-like OS (linux, darwin, etc.).
|
||||
func IsUnix() bool { return runtime.GOOS != "windows" }
|
||||
|
||||
// CPUArch converts runtime.GOARCH to a compact architecture label.
|
||||
func CPUArch() string { return archLabel(runtime.GOARCH) }
|
||||
|
||||
// archLabel maps a GOARCH value to a compact human-readable label. Unknown
|
||||
// values pass through unchanged.
|
||||
func archLabel(goarch string) string {
|
||||
switch goarch {
|
||||
case "amd64":
|
||||
return "x86_64"
|
||||
case "386":
|
||||
return "x86"
|
||||
default:
|
||||
return goarch
|
||||
}
|
||||
}
|
||||
|
||||
// Describe renders a short log-ready summary of the runtime.
|
||||
func (i Info) Describe() string {
|
||||
return i.Name + "/" + i.GOOS + "/" + i.GOARCH + " cpu=" + strconv.Itoa(i.CPUs) + " go=" + i.GoVer
|
||||
}
|
||||
|
||||
func platformName(goos string) string {
|
||||
switch goos {
|
||||
case "windows":
|
||||
return "Windows"
|
||||
case "darwin":
|
||||
return "macOS"
|
||||
case "linux":
|
||||
return "Linux"
|
||||
default:
|
||||
return goos
|
||||
}
|
||||
}
|
||||
|
||||
func platformKind(goos string) string {
|
||||
switch goos {
|
||||
case "windows", "darwin":
|
||||
return "desktop"
|
||||
case "linux":
|
||||
return "server"
|
||||
default:
|
||||
return "unknown"
|
||||
}
|
||||
}
|
||||
|
||||
func hostname() string {
|
||||
h, err := os.Hostname()
|
||||
if err != nil {
|
||||
return "unknown"
|
||||
}
|
||||
return h
|
||||
}
|
||||
Reference in new issue
Block a user