Call the context cancellation function

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

Metadata

ID: go-best-practices/context-cancelable

Language: Go

Severity: Warning

Category: Best Practices

Description

In Go, it is important to call the cancellation function returned by the context.WithTimeout and context.WithDeadline functions. These functions are designed to create a new context that can be cancelled, thus the cancellation function needs to be called for proper cleanup.

This rule is crucial because not calling the cancellation function can lead to resource leaks. A context that is not cancelled will remain in memory until the parent context’s cancellation function is called or the parent context’s deadline expires. This could potentially lead to high memory usage, especially in long-running programs or services that create many contexts.

To adhere to this rule, always call the cancellation function when the work associated with the context is done. This can be achieved by using defer immediately after the context is created, or by explicitly calling the cancellation function when the work is done. Alternatively, in testing scenarios, you can use t.Cleanup to call the cancellation function after the test is completed.

Non-Compliant Code Examples

func main() {
    ctx, cancel := context.WithTimeout()
}

Compliant Code Examples

func main() {
    ctx, cancel := context.WithTimeout();
    t.Cleanup(cancel);
}
func main() {
    ctx, cancel := context.WithTimeout();
    cancel();
}
func main() {
    ctx, cancel := context.WithTimeout();
    defer cancel();
}
https://static.datadoghq.com/static/images/logos/github_avatar.svg https://static.datadoghq.com/static/images/logos/vscode_avatar.svg jetbrains

Seamless integrations. Try Datadog Code Analysis

PREVIEWING: rtrieu/product-analytics-ui-changes