我正在尝试检索Go
应用程序的当前正常运行时间。
我已经看过那个'包syscall
提供type Sysinfo_t
和方法Sysinfo(*Sysinfo_t)
,显然可以让您检索正常运行时间(因为它' sa Sysinfo_t
struct的字段
到目前为止,我所做的是:
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上运行(我目前正在使用)。
是否有交叉兼容的方式来检索应用程序的正常运行时间?
注意:我不想使用任何第三方图书馆(除非他们绝对必要)
答案 0 :(得分:1)
您应该使用Since
包中的time
功能。
在应用程序启动时创建时间值:
startTime := time.Now()
然后随时询问:
uptime := time.Since(startTime)
答案 1 :(得分:1)
获得正常运行时间的简单方法是存储服务开始时间:
https://play.golang.org/p/by_nkvhzqD
package main
import (
"fmt"
"time"
)
var startTime time.Time
func uptime() time.Duration {
return time.Since(startTime)
}
func init() {
startTime = time.Now()
}
func main() {
fmt.Println("started")
time.Sleep(time.Second * 1)
fmt.Printf("uptime %s\n", uptime())
time.Sleep(time.Second * 5)
fmt.Printf("uptime %s\n", uptime())
}
答案 2 :(得分:0)
程序集syscall在Go 1.4上被冻结。
注意:此软件包已被锁定。应迁移标准Go存储库之外的代码以使用golang.org/x/sys存储库中的相应包。这也是应该应用新系统或版本所需的更新的地方。有关详细信息,请参阅https://golang.org/s/go1.4-syscall。
使用来自golang.org/x/sys
的{{3}}它应该以跨平台的方式支持这一点,至少在Unix上。