You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用WMI在Go语言程序中获取GPU信息?

使用Go通过WMI获取GPU信息

没问题!我来帮你搞定用Go通过WMI获取GPU信息的事儿。你提到的库确实是Windows环境下用Go操作WMI的主流选择,下面一步步给你讲清楚查询字符串怎么写,以及完整的实现代码:

1. 确定WMI查询类与语句

Windows的WMI体系中,Win32_VideoController是专门用来获取显卡(GPU)硬件信息的核心类,几乎所有你需要的GPU属性都能从这里拿到:

  • 如果你想获取GPU的全部信息,查询字符串可以写:SELECT * FROM Win32_VideoController
  • 如果你只需要特定字段(比如名称、显存、驱动版本),可以更精准地指定字段,减少不必要的数据返回:SELECT Name, AdapterRAM, DriverVersion, DeviceID FROM Win32_VideoController

2. 定义Go结构体映射WMI属性

WMI查询的结果需要映射到Go结构体上,每个字段需要用wmi:"对应WMI属性名"的标签来关联。针对上面的精简查询,我们可以定义这样的结构体:

type GPUInfo struct {
    DeviceID       string `wmi:"DeviceID"`
    Name           string `wmi:"Name"`
    AdapterRAM     uint64 `wmi:"AdapterRAM"` // 单位为字节
    DriverVersion  string `wmi:"DriverVersion"`
}

3. 完整示例代码

把这些逻辑整合起来,完整的可运行代码如下:

package main

import (
    "fmt"
    "log"

    "github.com/StackExchange/wmi"
)

type GPUInfo struct {
    DeviceID      string `wmi:"DeviceID"`
    Name          string `wmi:"Name"`
    AdapterRAM    uint64 `wmi:"AdapterRAM"`
    DriverVersion string `wmi:"DriverVersion"`
}

func main() {
    var gpus []GPUInfo
    // 使用精准查询语句,只获取需要的字段
    query := "SELECT DeviceID, Name, AdapterRAM, DriverVersion FROM Win32_VideoController"
    err := wmi.Query(query, &gpus)
    if err != nil {
        log.Fatalf("WMI查询失败: %v", err)
    }

    if len(gpus) == 0 {
        fmt.Println("未检测到GPU信息")
        return
    }

    fmt.Println("检测到的GPU信息:")
    for i, gpu := range gpus {
        // 将字节转换为更易读的GB单位
        ramGB := float64(gpu.AdapterRAM) / (1024 * 1024 * 1024)
        fmt.Printf("GPU %d:\n", i+1)
        fmt.Printf("  设备ID: %s\n", gpu.DeviceID)
        fmt.Printf("  名称: %s\n", gpu.Name)
        fmt.Printf("  显存: %.2f GB\n", ramGB)
        fmt.Printf("  驱动版本: %s\n", gpu.DriverVersion)
    }
}

额外提示

  • 如果你需要更多GPU属性,可以参考Win32_VideoController的属性列表,把对应的字段添加到结构体中即可,比如VideoModeDescription(当前显示模式)、Status(设备状态)等。
  • 该程序只能在Windows环境下运行,因为WMI是Windows特有的系统管理接口,同时要确保程序有足够的权限访问WMI服务。

内容的提问来源于stack exchange,提问作者DK AL

火山引擎 最新活动