// 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 }