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