Kaedah di atas boleh memenuhi keperluan, tetapi kami tidak perlu mencipta semula roda kerana sudah ada perpustakaan pihak ketiga yang cukup lengkap yang melaksanakan keperluan koleksi ini untuk kami, ia adalah gopsutil.
psutil (proses dan utiliti sistem,) ialah perpustakaan merentas platform yang digunakan untuk mendapatkan proses dan penggunaan sistem (CPU, memori, cakera, rangkaian, penderia) dalam Python, dan gopsutil adalah Pergi versi bahasa.
gopsutil melindungi kita daripada perbezaan dalam pelbagai sistem dan mempunyai mudah alih yang baik.
Senarai yang disokong
Selain itu, projek ini memindahkan struktur C ke struktur Go Tiada kod cgo dalam pelaksanaannya, yang lebih kondusif untuk kompilasi silang.
gopsutil pada masa ini mempunyai versi v3 dan v2, dan tiada jaminan keserasian ke belakang, jadi terdapat dua cara untuk menggunakannya
import ( // "github.com/shirou/gopsutil/v3/mem" // to use v3 "github.com/shirou/gopsutil/mem" )
Contohnya, jika kita ingin melihat maklumat penggunaan sistem , ia boleh diperolehi dengan cara berikut
package main import ( "fmt" "github.com/shirou/gopsutil/v3/mem" // "github.com/shirou/gopsutil/mem" // to use v2 ) func main() { v, _ := mem.VirtualMemory() // almost every return value is a struct fmt.Printf("Total: %v, Free:%v, UsedPercent:%f%%\n", v.Total, v.Free, v.UsedPercent) // convert to JSON. String() is also implemented fmt.Println(v) }
Hasilnya ialah
Total: 8589934592, Free:138248192, UsedPercent:76.416254% {"total":8589934592,"available":2025828352,"used":6564106240,"usedPercent":76.4162540435791,"free":138248192,"active":1949327360,"inactive":1887580160,"wired":2214510592,"laundry":0,"buffers":0,"cached":0,"writeBack":0,"dirty":0,"writeBackTmp":0,"shared":0,"slab":0,"sreclaimable":0,"sunreclaim":0,"pageTables":0,"swapCached":0,"commitLimit":0,"committedAS":0,"highTotal":0,"highFree":0,"lowTotal":0,"lowFree":0,"swapTotal":0,"swapFree":0,"mapped":0,"vmallocTotal":0,"vmallocUsed":0,"vmallocChunk":0,"hugePagesTotal":0,"hugePagesFree":0,"hugePageSize":0}
Satu perkara yang lebih mesra tentang pakej gopsutil ialah kebanyakan fungsi koleksi mengembalikan objek struktur, dan semuanya melaksanakan fmt Antara muka .Stringer, jadi apabila mencetak Ia akan dikeluarkan dalam format json.
Sebagai contoh, dalam contoh di atas, mem.VirtualMemory mengembalikan struktur VirtualMemoryStat, yang memanggil fungsi json.Marshal() dalam kaedah String().
type VirtualMemoryStat struct { Total uint64 `json:"total"` Available uint64 `json:"available"` Used uint64 `json:"used"` UsedPercent float64 `json:"usedPercent"` Free uint64 `json:"free"` Active uint64 `json:"active"` Inactive uint64 `json:"inactive"` Wired uint64 `json:"wired"` func (m VirtualMemoryStat) String() string { s, _ := json.Marshal(m) return string(s) }
gopsutil dibahagikan kepada sub-pakej yang berbeza melalui unit koleksi yang berbeza Dengan memperkenalkan sub-pakej yang berbeza semasa penggunaan, kaedah yang berkaitan boleh dipanggil.
import ( "github.com/shirou/gopsutil/v3/mem" "github.com/shirou/gopsutil/v3/cpu" "github.com/shirou/gopsutil/v3/disk" "github.com/shirou/gopsutil/v3/docker" "github.com/shirou/gopsutil/v3/host" "github.com/shirou/gopsutil/v3/internal" "github.com/shirou/gopsutil/v3/load" "github.com/shirou/gopsutil/v3/mem" "github.com/shirou/gopsutil/v3/net" "github.com/shirou/gopsutil/v3/process" "github.com/shirou/gopsutil/v3/winservices" )
Sebagai contoh, jika kita ingin mendapatkan maklumat hos, kita perlu memperkenalkan github.com/shirou/gopsutil/v3/host sub-package
import ( "fmt" "github.com/shirou/gopsutil/v3/host" ) func main() { hostInfo, _ := host.Info() fmt.Println(hostInfo) }
输出
{"hostname":"MacBook-Pro.local","uptime":1619284,"bootTime":1644332729,"procs":301,"os":"darwin","platform":"darwin","platformFamily":"Standalone Workstation","platformVersion":"10.15.5","kernelVersion":"19.5.0","kernelArch":"x86_64","virtualizationSystem":"","virtualizationRole":"","hostId":"7a1a74f2-30fc-4cc1-b439-6b7aef22e45d"}
gopsutil 库有非常全面的覆盖单元,包括主机、磁盘、内存、CPU、网络、进程、docker等模块,它能很好地帮助我们获取系统信息。并且 gopsutil 处理了跨平台兼容性问题,对外接口基本保持一致,使用起来比较友好。
Atas ialah kandungan terperinci Adakah anda masih menulis fungsi pemantauan sistem Go anda sendiri?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!