Linux (AMD64) の場合、go はclock_gettimewith を使用しCLOCK_REALTIMEます。time·now実装を参照してください。
時間が戻らない単調時計 (CLOCK_MONOTONICまたは) が必要です。CLOCK_MONOTONIC_RAWLinux では、man ページは、CLOCK_MONOTONIC飛躍しないことを保証しないことを明示的に示しています。
このクロックは、システム時間の不連続なジャンプ (たとえば、システム管理者が手動でクロックを変更した場合) の影響を受けませんが、adjtime(3) および NTP によって実行される増分調整の影響を受けます。
したがって、Linux では、おそらく最適な選択はCLOCK_MONOTONIC_RAW. そのために、@MatrixFrog で言及されているクロック パッケージ を使用できます
。例:
import (
"fmt"
"github.com/davecheney/junk/clock"
"time"
)
func main() {
start := clock.Monotonic.Now()
// work
end := clock.Monotonic.Now()
duration := end.Sub(start)
fmt.Println("Elapsed:", duration)
}
参考文献: