package main import ( "fmt" "log" lnet "net" "time" "github.com/shirou/gopsutil/cpu" "github.com/shirou/gopsutil/disk" "github.com/shirou/gopsutil/host" "github.com/shirou/gopsutil/load" "github.com/shirou/gopsutil/mem" "github.com/shirou/gopsutil/net" ) func main() { /* 获取系统性能数据 gopsutil */ // 1.获取cpu信息 getCPUInfo() // 2.获取cpu负载信息 getCPULoad() // 3.获取内存信息 getMemInfo() // 4.获取主机信息 getHostInfo() // 5.获取磁盘信息 getDiskInfo() // 6.获取网络IO getNetInfo() // 7.获取本机IP addr, _ := GetLocalIP() fmt.Println(addr) // ipv6 addr2 := GetOutboundIP() fmt.Println(addr2) // ipv4 } func GetOutboundIP() string { conn, err := lnet.Dial("udp", "8.8.8.8:80") if err != nil { log.Fatal(err) } defer conn.Close() localAddr := conn.LocalAddr().(*lnet.UDPAddr) return localAddr.IP.String() } func GetLocalIP() (ip string, err error) { addrs, err := lnet.InterfaceAddrs() if err != nil { return } for _, addr := range addrs { ipAddr, ok := addr.(*lnet.IPNet) if !ok { continue } if ipAddr.IP.IsLoopback() { continue } if ipAddr.IP.IsGlobalUnicast() { continue } return ipAddr.IP.String(), nil } return } func getNetInfo() { info, _ := net.IOCounters(true) for _, v := range info { fmt.Printf("%v 发送:%v 接收:%v\n", v, v.BytesSent, v.BytesRecv) } } func getDiskInfo() { parts, err := disk.Partitions(true) if err != nil { fmt.Printf("获取磁盘分区失败:%v\n", err) return } for _, part := range parts { fmt.Printf("分区:%v\n", part.String()) diskInfo, _ := disk.Usage(part.Mountpoint) fmt.Printf("磁盘已使用:%v, 磁盘空闲:%v\n", diskInfo.UsedPercent, diskInfo.Free) } // 磁盘IO信息 ioStat, _ := disk.IOCounters() for k, v := range ioStat { fmt.Printf("%v:%v\n", k, v) } } func getHostInfo() { hInfo, _ := host.Info() fmt.Printf("主机信息:%v 更新时间:%v 启动时间:%v", hInfo, hInfo.Uptime, hInfo.BootTime) } func getMemInfo() { memInfo, _ := mem.VirtualMemory() fmt.Printf("内存信息:%v\n", memInfo) } func getCPUInfo() { cpuInfos, err := cpu.Info() if err != nil { fmt.Println("获取cpu信息出错") } for _, ci := range cpuInfos { fmt.Println(ci) } // cpu使用率 percent, _ := cpu.Percent(time.Second, false) fmt.Println("cpu使用率", percent) } func getCPULoad() { info, _ := load.Avg() fmt.Printf("%v\n", info) }