7

我正在尝试检索我的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(我目前正在使用)上运行。

是否有一种交叉兼容的方式来检索应用程序的正常运行时间?

注意:我宁愿不使用任何第三方库(除非它们是绝对必要的)

4

3 回答 3

4

获得正常运行时间的简单方法是存储服务开始时间:

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())
}
于 2016-06-23T15:23:23.820 回答
3

您应该使用包中的Since功能time

在应用程序启动时创建时间值:

startTime := time.Now()

然后随时询问:

uptime := time.Since(startTime)

于 2016-06-23T14:47:12.190 回答
1

系统调用在 Go 1.4 上被冻结。

注意:此包已锁定。应迁移标准 Go 存储库之外的代码以使用 golang.org/x/sys 存储库中的相应包。这也是应该应用新系统或版本所需的更新的地方。有关更多信息,请参阅https://golang.org/s/go1.4-syscall

使用它的Sysinfogolang.org/x/sys应该以跨平台的方式支持这一点,至少在 Unix 上是这样。

于 2016-06-23T13:35:18.790 回答