当前位置: 首页 > news >正文

Go语言系统信息获取示例

Go语言系统信息获取示例

本项目演示了如何在Go语言中获取系统信息,类似Python的platform模块功能。

主要功能

标准库 runtime

  • Go版本信息
  • 操作系统类型
  • 系统架构
  • CPU核心数
  • 内存统计信息
  • Goroutine信息

第三方库 gopsutil

  • 主机信息: 主机名、运行时间、操作系统版本、内核版本等
  • CPU信息: CPU型号、厂商、频率、核心数、使用率等
  • 内存信息: 总内存、已用内存、缓存、交换分区等
  • 磁盘信息: 磁盘分区、使用率、文件系统等
  • 网络信息: 网络接口、IP地址、网络IO统计等

项目结构

.
├── main.go                 # 主程序,展示基本系统信息
├── system_info_test.go     # 详细的测试文件,包含所有功能测试
├── go.mod                  # Go模块文件
└── go.sum                  # 依赖校验文件

依赖

主要依赖第三方库:

  • github.com/shirou/gopsutil/v3 - 跨平台的系统信息获取库

安装和运行

  1. 初始化项目:

    go mod init system-info-test
    go get github.com/shirou/gopsutil/v3
    go mod tidy
    
  2. 运行主程序:

    go run main.go
    
  3. 运行详细测试:

    go test -v
    
  4. 运行性能测试:

    go test -bench=.
    
  5. 运行特定测试:

    go test -v -run TestCPUInfo        # 只测试CPU信息
    go test -v -run TestMemoryInfo     # 只测试内存信息
    go test -v -run TestDiskInfo       # 只测试磁盘信息
    

API对比

Python platform 模块对比

Python platform Go gopsutil 功能描述
platform.system() runtime.GOOS 操作系统名称
platform.machine() runtime.GOARCH 机器架构
platform.processor() cpu.Info() 处理器信息
platform.platform() host.Info() 平台信息
platform.node() host.Info().Hostname 主机名
platform.release() host.Info().KernelVersion 系统发行版本

示例代码

package mainimport ("fmt""runtime""github.com/shirou/gopsutil/v3/host""github.com/shirou/gopsutil/v3/cpu""github.com/shirou/gopsutil/v3/mem"
)func main() {// 获取基本信息fmt.Printf("操作系统: %s\n", runtime.GOOS)fmt.Printf("架构: %s\n", runtime.GOARCH)fmt.Printf("CPU核心数: %d\n", runtime.NumCPU())// 获取主机信息hostInfo, _ := host.Info()fmt.Printf("主机名: %s\n", hostInfo.Hostname)fmt.Printf("平台: %s %s\n", hostInfo.Platform, hostInfo.PlatformVersion)// 获取CPU信息cpuInfo, _ := cpu.Info()if len(cpuInfo) > 0 {fmt.Printf("CPU: %s\n", cpuInfo[0].ModelName)}// 获取内存信息memInfo, _ := mem.VirtualMemory()fmt.Printf("总内存: %d MB\n", memInfo.Total/1024/1024)fmt.Printf("内存使用率: %.2f%%\n", memInfo.UsedPercent)
}

测试功能

测试文件 system_info_test.go 包含以下测试:

  1. TestSystemInfo - 基本系统信息
  2. TestHostInfo - 主机详细信息
  3. TestCPUInfo - CPU详细信息和使用率
  4. TestMemoryInfo - 内存和交换分区信息
  5. TestDiskInfo - 磁盘分区和使用情况
  6. TestNetworkInfo - 网络接口和IO统计
  7. TestAllSystemInfo - 综合测试
  8. BenchmarkCPUUsage - CPU使用率获取性能测试
  9. BenchmarkMemoryInfo - 内存信息获取性能测试

跨平台支持

gopsutil 库支持多个操作系统:

  • Linux
  • Windows
  • macOS
  • FreeBSD
  • OpenBSD

注意事项

  1. 某些系统信息获取可能需要管理员权限
  2. 网络信息在不同操作系统上可能有差异
  3. CPU使用率获取需要一定时间间隔来计算
  4. 部分功能在虚拟化环境中可能受限

扩展功能

可以进一步扩展获取:

  • 进程信息
  • 服务信息
  • 温度传感器
  • GPU信息
  • 负载均衡信息

相关资源

  • gopsutil GitHub
  • Go runtime 包文档
  • 系统监控最佳实践
http://www.rkmt.cn/news/859.html

相关文章:

  • OpenCSG 哈投达成战略合作,加速东北企业AI转型
  • 收录笔记:蜘蛛池,蜘蛛池出租 - 蚂蚁站群
  • 核心漏洞开发实战:Win32漏洞挖掘与防护绕过深度解析
  • Karmada v1.15 版本发布!多模板工作负载资源感知能力增强
  • 使用JavaScript开发谷歌浏览器插件:实现与核心要点
  • 自动化SEO工具:黑帽站群软件 - 蚂蚁站群
  • openssl编程之hmac算法编程示例
  • c#项目迁移至Kubernetes之NTLM认证问题解决方案
  • AI写代码
  • 蚂蚁超级镜像站群搜索:多站搭建教程,提升排名实战手记 - 蚂蚁站群
  • 易基因:安医大陈飞虎团队揭示METTL3介导m6A甲基化在炎症性疾病发病机制中的表观调控作用:IJBM|项目文章
  • 一键批量镜像站群的软件,多任务不费时 - 蚂蚁站群
  • Year of the Rabbit – TryHackMe
  • 20231313张景云《密码系统设计》第一周
  • LLM-RAG项目细节-数据处理、分块..
  • 我的多站点管理神器:超级镜像站群使用手记 - 蚂蚁站群
  • CF2127H 23 Rises Again
  • 为什么收集分析用户反馈比功能上线更重要?
  • Symfony学习笔记 - Symfony Documentation - The Basics(2)
  • 【分享+1】HarmonyOS官方模板优秀案例(第6期:商务办公 笔记应用)
  • TypeScript 队列实战:从零实现简单、循环、双端、优先队列,附完整测试代码
  • 半导体行业CRM就用八骏CRM
  • c++开发大模型mcp服务(七)使用cpp-mcp的例子MCP-ExcelAutoCpp
  • 北京市科学技术奖励揭示创新风向标:信息技术与产学研协同成亮点
  • 如何去除AI生成文章中的AI成分:一份指南
  • 2025年9月份实时最新获取地图边界数据方法,省市区县街道多级联动【文末附实时geoJson数据下载】
  • os.Signal信号量
  • 国产化替代加速:Gitee Git自建平台如何破解企业代码管理困局
  • [豪の学习笔记] 软考中级备考 基础复习#4
  • 【源码解读之 Mybatis】【基础篇】-- 第1篇:MyBatis 整体架构设计