# Use Since() instead of Now().Sub()

이 페이지는 아직 한국어로 제공되지 않으며 번역 작업 중입니다. 번역에 관한 질문이나 의견이 있으시면 언제든지 저희에게 연락해 주십시오.

ID: `go-best-practices/time-now-sub`

Language: Go

Severity: Info

Category: Best Practices

## Description

Go’s `time` package provides functions and methods for working with dates and times. When calculating the duration between a specific time and the current time, it is recommended to use the `time.Since(x)` function instead of `time.Now().Sub(x)`.

Here are a few reasons why:

1. Readability: The `time.Since(x)` function conveys the intention of calculating the duration since a specific time `x` in a straightforward manner. It’s more readable and easier to understand than chaining `time.Now().Sub(x)`, which requires reading the code from right to left.
2. Performance: Using `time.Since(x)` avoids the unnecessary creation of an intermediate `time.Time` value with `time.Now()`. By directly calculating the time duration since `x`, you eliminate the overhead of the additional function call and improve performance.
3. Consistency: The `time.Since(x)` function provides a consistent and idiomatic way of calculating the duration since a specific time. It follows the design principles of the standard library and promotes best practices for Go code.

For example, consider the following code snippets:

``````1
2
3
x := time.Date(2022, time.March, 20, 0, 0, 0, 0, time.UTC)
duration := time.Now().Sub(x)
fmt.Println(duration)
``````

Output: The duration between the current time and March 20, 2022.

``````1
2
3
x := time.Date(2022, time.March, 20, 0, 0, 0, 0, time.UTC)
duration := time.Since(x)
fmt.Println(duration)
``````

Output: The duration between the current time and March 20, 2022.

Both snippets achieve the same result, but the second one using `time.Since(x)` is preferred for its simplicity, readability, and performance.

By using `time.Since(x)` instead of `time.Now().Sub(x)`, you can write more concise and idiomatic Go code, improving readability and maintaining consistency with the standard library.

## Non-Compliant Code Examples

``````func main() {
x := time.Now().Sub(x)
}
``````

## Compliant Code Examples

``````func main() {
x := time.Since(x)
}
``````

Seamless integrations. Try Datadog Code Analysis