【发布时间】:2016-10-25 20:22:54
【问题描述】:
我正在尝试检索我的 Go 应用程序的当前正常运行时间。
我看到有一个包 syscall 提供了一个 type Sysinfo_t 和一个方法 Sysinfo(*Sysinfo_t) 显然允许您检索正常运行时间(因为它是 Sysinfo_t 结构的字段)
到目前为止我所做的是:
sysi := &syscall.Sysinfo_t{}
if err := syscall.Sysinfo(sysi); err != nil {
return http.StatusInternalServerError, nil
}
问题是在编译时我得到了这个:
/path/to/file/res_system.go:43: undefined: syscall.Sysinfo_t
/path/to/file/res_system.go:45: undefined: syscall.Sysinfo
我搜索了一下,显然该方法和类型仅在 Linux 上可用,我需要该应用程序在 Linux 和 OsX(我目前正在使用)上运行。
是否有一种交叉兼容的方式来检索应用程序的正常运行时间?
注意:我宁愿不使用任何第三方库(除非绝对必要)
【问题讨论】:
-
为什么不直接使用计时器?
-
@eduncan911 老实说,在我看来,这似乎是一个相当繁重的解决方案,对吗?你想提供一个轻量级的例子吗?
-
想法:一个微型库,它添加了一个像 net/http/pprof 这样的 HTTP 处理程序,确实公开了应用程序已启动的 (nano/milli) 秒数。
-
一个轻量级的解决方案是在应用程序初始化时设置一个
startTime time.Time,然后调用time.Now().Sub(startTime).Seconds()。困难的部分可能是在包之间传递startTime -
为什么这个问题被否决了?
标签: go cross-compiling system-calls uptime sysinfo