尝试使用Go on Windows获取总物理内存,但不确定要使用哪些软件包和调用.我相信这可以做到syscall
.也不愿意与C接口来做到这一点.
https://golang.org/pkg/syscall/上的syscall包的官方在线godoc 似乎记录了Linux API,因此在线查找资源有点困难.
首先要做的是在Windows平台上运行godoc,或通过改变值的任何平台GOOS
和GOARCH
.
例如,在Linux shell中运行以下命令允许godoc相信它在Windows上运行,因此记录相应的文件:
export GOOS=windows
export GOARCH=amd64
godoc -http=:8080
Run Code Online (Sandbox Code Playgroud)
在浏览器中访问http:// localhost:8080/pkg/syscall /会显示Windows系统调用API文档.
快速搜索在MSDN上显示了一个有趣的功能,即GetPhysicallyInstalledSystemMemory
(参见https://msdn.microsoft.com/en-us/library/windows/desktop/cc300158(v=vs.85).aspx).
显然,Windows Go系统调用包中不存在此功能,因此无法直接调用它.
由于MSDN页面显示此功能存在kernel32.dll
于此页面(https://github.com/golang/go/wiki/WindowsDLLs)给出的解决方案中,因此不涉及与C的接口.
使该技术适应此功能给我们以下代码:
//+build windows
package main
import (
"fmt"
"syscall"
"unsafe"
)
func main() {
var mod = syscall.NewLazyDLL("kernel32.dll")
var proc = mod.NewProc("GetPhysicallyInstalledSystemMemory")
var mem uint64
ret, _, err := proc.Call(uintptr(unsafe.Pointer(&mem)))
fmt.Printf("Ret: %d, err: %v, Physical memory: %d\n", ret, err, mem)
}
Run Code Online (Sandbox Code Playgroud)
运行时,输出:
Ret:1,错误:L'opérationraéussi.,物理记忆:16777216
该值以千字节为单位,因此除以1048576(1024*1024)以获得以千兆字节为单位的值.
归档时间: |
|
查看次数: |
1128 次 |
最近记录: |