package utils import ( "encoding/json" "fmt" "net" "os" "runtime" "github.com/shirou/gopsutil/v3/cpu" "github.com/shirou/gopsutil/v3/disk" "github.com/shirou/gopsutil/v3/mem" ) func GetLocalIP() string { ifaces, err := net.Interfaces() if err != nil { return "" } for _, iface := range ifaces { if iface.Flags&net.FlagUp == 0 { continue // 接口未启用 } if iface.Flags&net.FlagLoopback != 0 { continue // 忽略回环 } addrs, err := iface.Addrs() if err != nil { continue } for _, addr := range addrs { var ip net.IP switch v := addr.(type) { case *net.IPNet: ip = v.IP case *net.IPAddr: ip = v.IP } if ip == nil || ip.IsLoopback() { continue } ip = ip.To4() if ip == nil { continue } return ip.String() } } return "" } func GetHostname() string { name, err := os.Hostname() if err != nil { return "" } return name } func GetMacAddress() string { ifaces, err := net.Interfaces() if err != nil { return "" } for _, iface := range ifaces { if iface.Flags&net.FlagUp == 0 || iface.Flags&net.FlagLoopback != 0 { continue } mac := iface.HardwareAddr.String() if mac != "" { return mac } } return "" } func GetOSInfo() string { return runtime.GOOS // windows, linux, darwin } func GetCPUInfo() string { info, err := cpu.Info() if err != nil || len(info) == 0 { return "" } return info[0].ModelName } func GetMemory() string { v, err := mem.VirtualMemory() if err != nil { return "" } return fmt.Sprintf("%dMB", v.Total/1024/1024) } func GetDisk() string { usage, err := disk.Usage("/") if err != nil { return "" } return fmt.Sprintf("%dGB", usage.Total/1024/1024/1024) } func PayloadToMap(payload []byte) (map[string]interface{}, error) { var result map[string]interface{} err := json.Unmarshal(payload, &result) if err != nil { return nil, err } return result, nil } func JSONToString(data map[string]interface{}) string { jsonBytes, err := json.Marshal(data) if err != nil { return "" } return string(jsonBytes) }