- 필수 기능
- 시작하기
- Glossary
- 표준 속성
- Guides
- Agent
- 통합
- 개방형텔레메트리
- 개발자
- Administrator's Guide
- API
- Datadog Mobile App
- CoScreen
- Cloudcraft
- 앱 내
- 서비스 관리
- 인프라스트럭처
- 애플리케이션 성능
- APM
- Continuous Profiler
- 스팬 시각화
- 데이터 스트림 모니터링
- 데이터 작업 모니터링
- 디지털 경험
- 소프트웨어 제공
- 보안
- AI Observability
- 로그 관리
- 관리
ID: go-best-practices/context-cancelable
Language: Go
Severity: Warning
Category: Best Practices
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.
func main() {
ctx, cancel := context.WithTimeout()
}
func main() {
ctx, cancel := context.WithTimeout();
t.Cleanup(cancel);
}
func main() {
ctx, cancel := context.WithTimeout();
cancel();
}
func main() {
ctx, cancel := context.WithTimeout();
defer cancel();
}
|
|
For more information, please read the Code Analysis documentation
Identify code vulnerabilities directly in yourVS Code editor
Identify code vulnerabilities directly inJetBrains products