7

アプリケーションの現在の稼働時間を取得しようとしていGoます。

アップタイムを取得できるようにするメソッドsyscallを提供するパッケージがあることを確認しました (これは構造体のフィールドであるため) 。type Sysinfo_tSysinfo(*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

パッケージsyscallは Go 1.4 でフリーズしました。

注: このパッケージはロックダウンされています。標準の Go リポジトリ外のコードは、golang.org/x/sys リポジトリ内の対応するパッケージを使用するように移行する必要があります。また、新しいシステムまたはバージョンに必要な更新を適用する場所でもあります。詳細については、 https://golang.org/s/go1.4-syscallを参照してください。

Use Sysinfo from golang.org/x/sysit は、少なくとも Unix では、クロスプラットフォームの方法でこれをサポートする必要があります。

于 2016-06-23T13:35:18.790 に答える